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

Luc*_*lla 7 ios nsurlsession alamofire

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

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

我希望马上收到一个错误.我错过了什么吗?

Uts*_*sad 4

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

一般来说,如果线路出现问题,NSURLSession 后台会话不会使任务失败。相反,它会继续寻找运行请求的好时机并在那时重试。这将持续到资源超时到期(即用于创建会话的 NSURLSessionConfiguration 对象中的 timeoutIntervalForResource 属性中的值)。该值当前的默认值为一周!

我在开发者论坛找到了上述答案。

在后台会话中可能有帮助的更多详细信息:

另一个好处是,在后台会话中,我们为您监控网络和电源环境。这意味着我们会为您提供网络可达性和连接性等内容,因此您根本不必使用可达性 API。在我们知道服务器可以访问之前,我们不会尝试建立连接。同样,如果用户正在执行下载并退出 Wi-Fi,通常该任务会因传输错误而失败。但是,在后台会话中,我们实际上会自动从中恢复并重试,如果下载可恢复,则从中断处恢复。而且您不会听到该错误。

来源:2014 年全球开发者大会