我看到很多可达性示例,其中人们只在可达性状态更改时显示一条消息。
但最近,我在 Foursquare 应用程序中看到,每当用户尝试执行需要 Internet 连接的操作时,它们都会显示一条消息。
我认为这是更强大和更好的用户体验,可以提醒用户他不能在没有互联网的情况下做任何事情。主要是因为用户可以在应用程序之间切换,做其他事情,而当他回来时忘记他没有连接。
同样,只要他们恢复连接,我就可以看到他们从 Internet 获取数据并刷新 UI。
我真正在寻找的是做到这一点的最佳方法。这是怎么做到的?
他们是否有一个通用的 UIViewController 可以在每次需要连接时检查可达性?
或者他们在每个 Internet 请求之前都有一种代理类来取消请求并显示一条消息?你们是怎么处理的?
谢谢。
编辑:
我想出的解决方案是使用 AFNetworking,它还在框中提供可达性状态。
基本上我创建了一个 AFHTTPClient 并在其上设置了一个可达性回调块来监听状态变化。AFHTTPClient 对象是应用程序范围的(一种单例)。(实际上,我需要访问 a.com、b.com 的每个主机都有一个 AFHTTPClient ...)。
然后,当我需要执行一个请求时,我创建一个新的 AFHTTPRequestOperation(在我的情况下为 AFJSONRequestOperation),并将它排入我的 AFHTTPClient 对象。在操作的失败块中,我检查是否可以使用networkReachabilityStatus
AFHTTPClient 的属性访问主机。如果无法访问,我会显示一条消息,指出用户没有互联网连接。
我把它包起来了,所以我不必每次创建操作时都这样做。所以现在在应用程序中,每次用户在没有连接的情况下尝试做某事时,他都会收到一条消息,提醒他他无法访问互联网。
一旦我恢复连接(或者更确切地说,一旦我应该有一个连接),我也会使用可达性回调在屏幕上重新加载数据。
我不知道这是否是最佳做法,但我认为很高兴知道该应用程序会在新连接可用时立即重新加载重要数据。
如果有人对示例代码感兴趣,我可以提供。