可达性与NSURLSession响应以检测互联网连接

时间:2016-02-12 17:38:52

标签: ios swift nsurlsession reachability

我为我的API调用构建了错误案例,并希望检查互联网连接不可用时的情况。

dataTaskWithRequest似乎处理得很好,并返回NSError,代码为-1009,描述为没有互联网连接。我没有必要等待请求超时。

在什么情况下我想要使用Reachability Framework? 感谢

1 个答案:

答案 0 :(得分:16)

我做了一些研究,并在Apple Docs中找到了答案。

建议的最佳做法是尝试连接。如果连接存在问题,它会为您提供一个NSError对象,您应该使用它来测试连接。

Apple建议仅​​将Reachability用作诊断错误和进一步调试已知问题的方法。看起来您应该只使用可访问性来检测网络在发生故障后何时重新联机。

“始终尝试建立连接。不要试图猜测网络服务是否可用,并且不要缓存该决定。

如果连接失败,请使用SCNetworkReachability API来帮助诊断失败原因。“

来源: https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/WhyNetworkingIsHard/WhyNetworkingIsHard.html#//apple_ref/doc/uid/TP40010220-CH13-SW3

“当任何任务完成时,NSURLSession对象使用错误对象或nil调用委托的URLSession:task:didCompleteWithError:方法(如果任务成功完成)。

如果任务失败,大多数应用程序应重试请求,直到用户取消下载或服务器返回错误,指示请求永远不会成功。但是,您的应用不应立即重试。相反,它应该使用可访问性API来确定服务器是否可访问,并且只有在收到可访问性已更改的通知时才应发出新请求。“

源:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/NSURLSessionConcepts/NSURLSessionConcepts.html