当我尝试在网络离线(飞机模式)时尝试启动基本NSURLSession传输时,使用NSURLSessionConfiguration defaultSessionConfiguration和ephemeralSessionConfiguration,我当然会立即收到NSError:
Domain = NSURLErrorDomain Code = -1009&# 34; Internet连接似乎处于脱机状态。"
但是使用NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier,NSURLSession永远不会返回,没有任何响应,没有触发超时,它会被卡住。
这发生在iOS上8.x中使用iOS 7.x,我得到了预期的NSError。
为什么?有没有办法得到一些错误?
答案 0 :(得分:3)
通常,NSURLSession后台会话不会使任务失败 电线上出了问题。相反,它继续寻找一个 是时候运行请求并重试了。这继续下去 直到资源超时到期(即,值的 NSURLSessionConfiguration中的timeoutIntervalForResource属性 用于创建会话的对象)。当前的默认值 价值是一周!换句话说,失败的行为 iOS7中的超时不正确。在后台会话中, 因网络而不会立即失败更有意思 问题。因此,自iOS8以来,即使NSURLSession任务仍在继续 遇到超时和网络丢失。然而它一直持续到 到达timeoutIntervalForResource。
所以基本上timeoutIntervalForRequest在后台会话中不起作用,但是timeoutIntervalForResource会起作用。
我从developer forum的Apple员工中得到了一个答案。另外,我已通过实施验证了这一点。