具有后台会话配置的NSURLSession在没有连接时不返回错误

时间:2015-10-20 16:41:14

标签: ios nsurlsession alamofire

当我使用后台会话配置设置NSURLSession / Alamofire.Manager时,如果没有互联网连接,我希望收到通常的NSError&#34 ;错误域= NSURLErrorDomain代码= -1009" Internet连接似乎处于脱机状态。"。

如果我没有使用后台配置,这种情况经常发生,但如果我进行这样的配置,我的回调/委托方法将永远不会被调用。当我再次激活wifi时,它最终会被调用。

我希望马上收到错误。我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

后台会话任务中的网络故障未返回任何错误的原因是:

  

通常,NSURLSession后台会话不会使任务失败   电线上出了问题。相反,它继续寻找一个   是时候运行请求并重试了。这继续下去   直到资源超时到期(即,中的值)   NSURLSessionConfiguration中的timeoutIntervalForResource属性   用于创建会话的对象)。当前的默认值   价值是一周!

我在developer forum找到了上述答案。

可能有助于后台会话的更多细节:

  

另一个好处是在后台会话中,我们监控   网络和电力环境为您服务。这意味着我们涵盖了一些东西   像网络可达性和连接,所以你没有   根本使用可达性API。我们不会尝试建立一个   连接,直到我们知道服务器可以访问。同样地,   如果用户正在执行下载并逐步退出Wi-Fi   然后该任务将因传输错误而失败。但是,在一个   后台会话,我们实际上会自动恢复   如果下载可恢复,请重试并恢复我们停止的位置。   你不会听到这个错误。

来源:WWDC 2014

答案 1 :(得分:2)

API不会告诉您网络不存在,因为这将是一个错误,表明连接永远不会完成。实际上,假设网络最终回归,它将会发生。

如果由于某种原因需要接收错误,请不要使用后台会话。

或者,如果您只是想了解网络是否已启用某种UI提示,请使用可访问性API。话虽如此,不要因为可达性失败而拒绝启动请求,因为可达性就在其中。