我看到很多Reachability示例,其中人们只在可达性状态发生变化时显示消息.
但最近,我在Foursquare应用程序中看到,每次用户尝试执行需要Internet连接的操作时,它们都会显示一条消息.
我认为这是一个更强大和更好的用户体验提醒用户他没有互联网不能做任何事情.主要是因为用户可以在应用程序之间切换,做其他事情并忘记他回来时没有联系.
一旦他们获得连接,我就可以看到他们从Internet获取数据并刷新UI.
我真正想要的是最好的方法.怎么做的?
他们是否有一个通用的UIViewController,每次需要连接时都会检查是否具有可达性?
或者,在每个取消请求并显示消息的Internet请求之前,他们是否有一种代理类?你们是如何处理的?
谢谢.
编辑:
我提出的解决方案是使用AFNetworking,它还在框中提供可达性状态.
基本上我创建了一个AFHTTPClient并在其上设置了一个可达性回调块来监听状态变化.AFHTTPClient对象是应用程序范围的(一种单例).(事实上,每个主机我有一个AFHTTPClient,我需要到达a.com,b.com ......).
然后,当我需要执行请求时,我创建了一个新的AFHTTPRequestOperation(在我的情况下是AFJSONRequestOperation),然后我将它排入AFHTTPClient对象.在操作的故障块中,我检查主机是否可以使用networkReachabilityStatusAFHTTPClient 的属性访问.如果无法访问,我会显示一条消息,表明用户没有互联网连接.
我把它包起来,所以每次创建操作时我都不必这样做.所以现在在应用程序中,每当用户尝试在没有连接时做某事时,他都会收到一条消息,记住他没有互联网访问权限.
我还使用可达性回调在我获得连接后重新加载屏幕上的数据(或者更确切地说,一旦我应该有连接).
我不知道这是不是最佳做法,但我认为很高兴知道应用程序会在新连接可用时立即重新加载重要数据.
如果有人对示例代码感兴趣,我可以提供它.
vig*_*o24 18
在今年的WWDC演讲中,舞台上的Apple工程师建议用户永远不要将应用程序互联网访问基于Reachability示例应用程序状态.通常可达性不提供完整的信息(它基于复杂的机制),工程师提供的建议如下:
Apple工程师所说的完全正确:在互联网连接非常活跃的时候,你经常可以在控制台日志中看到Reachability故障信息.
其他的事情:没有比状态栏中显示的更好的"网络提示":如果你有Wi-Fi图标,3G/4G图标,蜂窝场强.
回到原来的问题:没有绝对更好的方法来管理这些东西,这在很大程度上取决于应用程序架构.如果您更喜欢将网络内容集中在专用类(不是UIViewController而是NSObject子类)中,那么为最新的Internet连接后更新为"成功/失败"的类定义只读属性是有意义的.使用服务器应用程序(对谷歌或苹果等其他服务器进行ping操作是没有意义的:首先它不优雅,其次问题可能来自服务于应用程序的服务器而不是设备互联网连接状态!).
@property (readonly) BOOL lastConnectionToMyServerSuccessRun Code Online (Sandbox Code Playgroud)
然后您的视图控制器可以注册(通过KVO或通过中央通知)更改此属性并通过显示图标或相应更新其UI(我重复:让用户尝试手动连接到互联网).视线控制器应在看不见时("viewWillDisappear:")或卸载("viewDidLoad:")或dealloc'd从KVO取消注册.
当然,这会增加一些额外的复杂性.例如:你使用应用程序,互联网灯是绿色的.然后你暂停它,做一些其他事情,几分钟后你回到应用程序.在这种情况下,应用程序应该ping您的服务器以再次恢复互联网指示灯状态,因为几分钟之后网络状况可能已经改变(例如,您在火车上).在任何情况下,所有加载的视图控制器都将从网络专用类获取KVO通知并自行更新.
| 归档时间: |
|
| 查看次数: |
4819 次 |
| 最近记录: |