Apple提供了一个名为Reachability的类。我几乎使用它,但后来发现很多人报告了 SO 的问题。例如,它会多次报告误报或显示相同的错误通知,使用户多次点击"无互联网"警报视图。
为什么我不能简单地尝试在后台获取数据并查看我得到什么?
NSData *download = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlStr]];
我检查了一下:当没有互联网时,download
只会为零。然后我可以提出一个UIAlertView并抱怨。
还有一些用户说,只检查"互联网连接"是愚蠢的,因为可达性只告诉是否连接到网关。网关可以没有互联网。我的WiFi路由器一直在这样做。iPad有WiFi接收,但没有互联网。
其他人说最好测试特定的URL,看看服务器是否存在。
那么,为什么要为可达性类而烦恼呢?为什么不尝试实际下载,如果没有任何反应,假设出了问题?
如何确定当前活动的网络连接是 Wi-Fi 还是运营商的网络?
SCNetworkReachability
API 允许应用程序确定系统当前网络配置的状态以及目标主机的可访问性。API 返回的标志之一 kSCNetworkReachabilityFlagsIsWWAN
将告诉您与目标主机的网络连接是否使用运营商网络...
来自网络和互联网编码操作方法
一个原因是您会在加载时检查可访问性,如果没有互联网,甚至不要显示按钮来访问互联网。这将使您不必在知道它是否可用之前加载整个下载。
在很多情况下,你是对的。但有时您只想在实际下载任何内容之前很久进行检查。
此外,如果你在Github上环顾四周,有很多可达性类比Apple包含的更好。