2015-10-20 14 views
6

NSURLSession/Alamofire.Managerをバックグラウンドセッション構成で設定すると、インターネット接続がない場合は、通常のNSError "エラードメイン= NSURLErrorDomainコード= -1009"インターネット接続がオフラインになっているようです "。バックグラウンドセッション構成のNSURLSessionが接続がないときにエラーを返さない

バックグラウンド構成を使用していない場合、これは定期的に発生しますが、私は再び無線LANを起動すると呼び出されます。

私は受信したい直ちにエラーを起こしてください。何か不足していますか?

答えて

3

理由は次のとおりです。

何かがワイヤ上でうまくいかない場合は、一般的にNSURLSession背景セッションがタスクを失敗しません。むしろ、それは要求を実行するのに良い時間を 探し続け、その時に再試行します。これは、リソースのタイムアウト(セッションの作成に使用するNSURLSessionConfiguration オブジェクト内の timeoutIntervalForResourceプロパティの値)が終了するまで、 を続けます。その 値の現在のデフォルトは1週間です!

上記の回答はdeveloper forumです。背景セッションに役立つかもしれない

詳細:

もう一つの利点は、バックグラウンドセッションで、私たちはあなたのため ネットワークや電源環境を監視することです。つまり、ネットワークの到達可能性と接続性のように、 のようなものをカバーしているため、到達可能性APIをまったく使用するために はありません。サーバが到達可能であることがわかるまで、接続の確立を試みることはありません( )。同様に、 ユーザーがダウンロードを実行してWi-Fiから脱出する場合は、通常 そのタスクは送信エラーで失敗します。しかし、バックグラウンドセッションの では、実際には自動的に回復し、 は再試行し、ダウンロードが再開できる場合は中断したところから再開します。 あなたはそのエラーについて聞かないでしょう。

出典:WWDC 2014

2

APIは、接続が完了しないことを示すエラーであるため、ネットワークが存在しないことを通知しません。実際には、ネットワークが最終的に戻ってくると仮定します。

何らかの理由でエラーを受け取る必要がある場合は、バックグラウンドセッションを使用しないでください。

また、何らかのUIヒントのためにネットワークが起動しているかどうかを知りたい場合は、reachability APIを使用してください。それは、到達可能性があるため、到達不能に基づいて要求を開始することを拒否しないでください。背景セッションタスクがエラーを返さないで、なぜネットワーク障害という

関連する問題