NSURLSession后台传输超时未触发

时间:2015-06-16 15:49:36

标签: ios timeout nsurlsession nsurlsessionconfiguration

当我尝试在网络离线(飞机模式)时尝试启动基本NSURLSession传输时,使用NSURLSessionConfiguration defaultSessionConfiguration和ephemeralSessionConfiguration,我当然会立即收到NSError:
Domain = NSURLErrorDomain Code = -1009&# 34; Internet连接似乎处于脱机状态。"
但是使用NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier,NSURLSession永远不会返回,没有任何响应,没有触发超时,它会被卡住。
这发生在iOS上8.x中使用iOS 7.x,我得到了预期的NSError。
为什么?有没有办法得到一些错误?

1 个答案:

答案 0 :(得分:3)

  

通常,NSURLSession后台会话不会使任务失败   电线上出了问题。相反,它继续寻找一个   是时候运行请求并重试了。这继续下去   直到资源超时到期(即,值的   NSURLSessionConfiguration中的timeoutIntervalForResource属性   用于创建会话的对象)。当前的默认值   价值是一周!换句话说,失败的行为   iOS7中的超时不正确。在后台会话中,   因网络而不会立即失败更有意思   问题。因此,自iOS8以来,即使NSURLSession任务仍在继续   遇到超时和网络丢失。然而它一直持续到   到达timeoutIntervalForResource。

所以基本上timeoutIntervalForRequest在后台会话中不起作用,但是timeoutIntervalForResource会起作用。

我从developer forum的Apple员工中得到了一个答案。另外,我已通过实施验证了这一点。