當我關閉WiFi連接並在iPhone 6s 10.2模擬器上運行以下代碼時,回調永遠不會執行。我預計這個回調很快會出現「沒有互聯網連接」的錯誤。NSURLSessionTask永不回電無線關閉
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
。
難道這是因爲你使用共享會話的? – matt
「但它需要10秒以上,我寧願不讓他們等待」。我不明白,如果您的連接需要10秒才能收到回覆,爲什麼不設置超時?您需要設置一個超時來處理連接錯誤和超時。即使「wifi已開啓」也不意味着連接將100%工作。您不應該專注於「讓人們等待」,而是應該相應地處理錯誤和用戶界面,以便在連接花費比預期更多的時間時向用戶顯示進度信息。 – 2017-02-20 19:51:19
@matt - 我不確定 - 我嘗試了'defaultSessionConfiguration'和'ephemeralSessionConfiguration'並得到了相同的結果 – bendytree