当我关闭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
。
答案 0 :(得分:1)
此属性确定所有任务的资源超时间隔 在基于此配置的会话中。资源超时 interval控制等待整个资源的时间(以秒为单位) 在放弃之前转移。资源计时器启动时 请求已启动并计算,直到请求完成或 达到此超时间隔,以先到者为准。
默认值为7天。
和
重要
后台会话创建的任何上传或下载任务 如果原始请求因a而失败,则会自动重试 超时。配置上载或下载任务的时长 允许重试或转让,使用 timeoutIntervalForResource属性。
默认值为60。
因此,如果没有设置超时,您的连接将运行7天。
通常,NSURLSession后台会话不会使任务失败 电线上出了问题。相反,它继续寻找一个 是时候运行请求并重试了。这继续下去 直到资源超时到期(即,中的值) NSURLSessionConfiguration中的timeoutIntervalForResource属性 用于创建会话的对象)。当前的默认值 价值是一周!