【发布时间】:2017-07-10 05:35:42
【问题描述】:
当我关闭 WiFi 连接并在 iPhone 6s 10.2 模拟器上运行以下代码时,从未执行回调。我预计回调会很快触发,并出现“无 Internet 连接”之类的错误。
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。
【问题讨论】:
-
这可能是因为您使用了共享会话吗?
-
“但它需要 10 多秒,我不想让他们等待”。我不明白,如果您的连接需要 10 秒才能收到响应,您为什么不设置超时?您需要设置超时来处理连接错误和超时。即使“wifi 已开启”并不意味着连接将 100% 正常工作。您不应专注于“让人们等待”,而应相应地处理错误和用户界面,以便在连接花费的时间超出预期时向您的用户显示进度信息栏。
-
@matt - 我不确定 - 我试过
defaultSessionConfiguration和ephemeralSessionConfiguration并得到了相同的结果 -
@Sneak - 我在实际项目中确实有超时,如果连接速度很慢,我不介意让他们等待。但如果没有 wifi,那么我宁愿不让他们等待完全超时 - 比如 ajax/browsers/curl/etc
标签: ios ios-simulator nsurlsession nsurlsessiontask