WiFi接続をオフにして、iPhone 6s 10.2シミュレータで次のコードを実行すると、コールバックは実行されません。私はコールバックが「インターネット接続なし」のようなエラーでかなり早く発砲することを期待していました。アプリが最初にロード、私はデータをフェッチしていNSURLSessionTask WiFiオフ時にコールバックしない
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];
私の問題
。無線LANがオフになっている場合は、エラーを表示する必要があります。タイムアウトを設定すると、従うことになりますが、10秒以上かかる必要があり、待ち時間を長くしないでください。私はまた、到達可能性を持つネットワーク状態を検出しようとしましたが、アプリケーションが最初にロードされるとき、ネットワーク状態はしばしばunknown
です。
これは、共有セッションの使用のだろうか? – matt
"しかし、10秒以上かかる必要があります。あなたの接続が応答を受け取るのに10秒かかる場合は、なぜタイムアウトを設定しないのですか?接続エラーとタイムアウトを処理するには、タイムアウトを設定する必要があります。たとえ "無線LANがオン"であっても、接続は100%動作しません。 「人を待たせる」ことに集中すべきではなく、接続に予想以上の時間がかかると、エラーとユーザーインターフェイスを処理して、ユーザーに進捗情報の情報を表示するようにしてください。 –
@matt - 私は 'defaultSessionConfiguration'と' ephemeralSessionConfiguration'を試してみましたが、同じ結果を得ました – bendytree