2012-11-06 16 views
6

ユーザーがiPad画面をロックしたりロック解除したりしたときに何が起こっているのかを知りたい。 NSURLConnectionを使用してファイルをダウンロードするアプリケーションがあり、ダウンロードがSOAPエラー(「指定されたホスト名を持つサーバーが見つかりませんでした」)で失敗しますが、ユーザーが画面をロックするときにロックを解除するときは失敗します。 エラーがポップアップしても、ダウンロードは完了しません。なぜどんなアイデア、それについて何ができるのでしょうか?私が言うことができるものから、ロック画面の割り込みNSURLConnection

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:300]; 

NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest: request delegate: self]; 

、私は私が得るホームボタンヒット:

applicationWillResignActive 
applicationDidEnterBackground 

をし、私は私が得る3分後にアプリをリコールした後:

applicationWillEnterForeground 

とダウンロードはすでに終了しているか、バックグラウンドでも進行しています。

バックグラウンドで長時間(5分)放置すると、エラーが発生してタイムアウトします。

私は画面をロックすると、アプリケーションの状態は同じですが、ダウンロードの切断に関するエラーメッセージも表示されます。

ありがとうございました!

+0

私は、この問題の洗練された解決方法も探しています。接続をキャンセルする必要はありません。 – Snips

答えて

6

私の推測では、アプリケーションがバックグラウンドになって実行中で、接続を継続する正しい実装がないと接続が切断されているようです。 AppleのBackground Execution and Multitaskingのドキュメントをご覧ください。バックグラウンドで実行しているアプリを終了させずに最大約10分間放置する方法を説明します。次のサンプルコードを探して、問題を解決できるかどうかを確認してください。

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
     // Clean up any unfinished task business by marking where you. 
     // stopped or ending the task outright. 
     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 

    // Start the long-running task and return immediately. 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     // Do the work associated with the task, preferably in chunks. 

     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }); 
} 
+0

ありがとうございます。これは有望に見えます。 – TrekOnTV2017

+0

なぜすぐに戻りますか?もしそうなら、どのようにインターネットとの接続を継続しますか? – Shamsiddin

+0

@yeesterbunnyこの方法の使い方は?私はバックグラウンドで作業したい私のアプリのその部分でこのbgTaskを使用する必要がありますか? – user2545330

関連する問題