当WiFi关闭时,NSURLSessionTask永远不会回叫

时间:2017-02-20 19:46:00

标签: ios ios-simulator nsurlsession nsurlsessiontask

当我关闭WiFi连接并在iPhone 6s 10.2模拟器上运行以下代码时,回调永远不会执行。我预计回调会很快发生,并出现错误,例如"没有互联网连接"。

NSLog(@"request-start");
NSURLRequest* request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://www.google.com"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:0];
task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    NSLog(@"request-end");
}];
[task resume];

我的问题

我首次加载应用时提取数据。如果wifi关闭,我需要显示错误。如果我设置超时,则遵守 - 但它需要10秒以上,我宁愿不让他们等待。我还尝试使用可访问性检测网络状态,但首次加载应用时,网络状态通常为unknown

1 个答案:

答案 0 :(得分:1)

timeoutIntervalForResource

  

此属性确定所有任务的资源超时间隔   在基于此配置的会话中。资源超时   interval控制等待整个资源的时间(以秒为单位)   在放弃之前转移。资源计时器启动时   请求已启动并计算,直到请求完成或   达到此超时间隔,以先到者为准。

     

默认值为7天。

timeoutIntervalForRequest

  

重要

     

后台会话创建的任何上传或下载任务   如果原始请求因a而失败,则会自动重试   超时。配置上载或下载任务的时长   允许重试或转让,使用   timeoutIntervalForResource属性。

     

默认值为60。

因此,如果没有设置超时,您的连接将运行7天。

  

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

Source