当我使用后台会话配置设置NSURLSession / Alamofire.Manager时,如果没有互联网连接,我希望收到通常的NSError
&#34 ;错误域= NSURLErrorDomain代码= -1009" Internet连接似乎处于脱机状态。"。
如果我没有使用后台配置,这种情况经常发生,但如果我进行这样的配置,我的回调/委托方法将永远不会被调用。当我再次激活wifi时,它最终会被调用。
我希望马上收到错误。我错过了什么吗?
答案 0 :(得分:4)
后台会话任务中的网络故障未返回任何错误的原因是:
通常,NSURLSession后台会话不会使任务失败 电线上出了问题。相反,它继续寻找一个 是时候运行请求并重试了。这继续下去 直到资源超时到期(即,中的值) NSURLSessionConfiguration中的timeoutIntervalForResource属性 用于创建会话的对象)。当前的默认值 价值是一周!
我在developer forum找到了上述答案。
可能有助于后台会话的更多细节:
另一个好处是在后台会话中,我们监控 网络和电力环境为您服务。这意味着我们涵盖了一些东西 像网络可达性和连接,所以你没有 根本使用可达性API。我们不会尝试建立一个 连接,直到我们知道服务器可以访问。同样地, 如果用户正在执行下载并逐步退出Wi-Fi 然后该任务将因传输错误而失败。但是,在一个 后台会话,我们实际上会自动恢复 如果下载可恢复,请重试并恢复我们停止的位置。 你不会听到这个错误。
来源:WWDC 2014
答案 1 :(得分:2)
API不会告诉您网络不存在,因为这将是一个错误,表明连接永远不会完成。实际上,假设网络最终回归,它将会发生。
如果由于某种原因需要接收错误,请不要使用后台会话。
或者,如果您只是想了解网络是否已启用某种UI提示,请使用可访问性API。话虽如此,不要因为可达性失败而拒绝启动请求,因为可达性就在其中。