我看到很多Reachability示例,其中人员只在可达性状态更改时才显示消息。
但最近,我在Foursquare应用程序中看到,每当用户尝试进行需要Internet连接的操作时,它们都会显示一条消息。
我认为这是更强大和更好的用户体验提醒用户,他不能做任何事情,没有互联网。主要是因为用户可以在应用之间切换,做别的事情,忘记他回来时没有任何联系。
此外,只要他们获得连接,我可以看到他们从互联网获取数据并刷新UI。我应该在每个UIViewController中侦听可达性更新吗?
我真正想要的是做到这一点的最佳方式。这是如何完成的?
他们是否有一个通用的UIViewController,每次需要连接时都会检查可达性?
或者他们有每种互联网请求之前有一种代理类,取消请求并显示一条消息? 你们是如何处理这个问题的?
谢谢。
编辑:
我想出了使用AFNetworking也提供箱子到达状态的解决方案。
基本上我创建了一个AFHTTPClient并在其上设置了一个可达性回调模块来监听状态变化。 AFHTTPClient对象是应用程序范围的(一种单例)。 (实际上,我需要每台主机都有一个AFHTTPClient,以便达到a.com,b.com ...)。
然后,当我需要执行一个请求时,我创建了一个新的AFHTTPRequestOperation(AFJSONRequestOperation,在我的情况下),并将其排入我的AFHTTPClient对象。 在操作的故障块中,我检查主机是否可以通过AFHTTPClient的networkReachabilityStatus
属性访问。如果无法访问,我会显示一条消息,指出用户没有互联网连接。
我把它包起来,所以我不必每次创建操作都这样做。所以现在在应用程序中,每当用户在没有连接时尝试做某件事,他就会收到一条消息,记住他没有互联网接入。
我也使用可达性回调来重新加载屏幕上的数据,一旦我得到连接(或更确切地说,我应该有一个连接)。
我不知道这是否是最佳做法,但我认为很高兴知道应用程序负责在新连接可用时重新加载重要数据。
如果有人对示例代码感兴趣,我可以提供它。
非常感谢这个答案,你还记得它是哪个WWDC谈话/视频吗? – florian
不确定要记住它。尝试会话706和225(会话的第二部分)。 – viggio24