当我关闭WiFi连接并在iPhone 6s10.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。
发布于 2017-02-20 20:05:21
此属性根据此配置确定会话中所有任务的资源超时间隔。资源超时间隔控制在放弃之前等待整个资源传输的时间(以秒为单位)。资源计时器在请求启动时启动,并对进行计数,直到请求完成或达到此超时间隔(以第一位为准)为止。 默认值是7天.
和
重要 如果原始请求由于超时而失败,则由后台会话创建的任何上载或下载任务都会自动重新尝试。若要配置允许重新尝试或传输上载或下载任务的时间,请使用timeoutIntervalForResource属性。 默认值为60.
因此,如果没有设置超时,您的连接将运行7天。
通常,如果NSURLSession后台会话出现故障,则不会导致任务失败。相反,它继续寻找一个运行请求并在那个时候重试的好时机。这种情况一直持续到资源超时过期(即用于创建会话的timeoutIntervalForResource对象中的NSURLSessionConfiguration属性中的值)。该值的当前默认值是一周!
https://stackoverflow.com/questions/42353046
复制相似问题