6

ユーザーがiPadの画面をロックおよびロック解除したときに舞台裏で何が起こっているのか知りたいのですが。NSURLConnectionを使用してファイルをダウンロードするアプリがあり、SOAPエラー(「指定されたホスト名のサーバーが見つかりませんでした」)でダウンロードが失敗しますが、ユーザーが画面をロックしたときではなく、ロックを解除したときです。エラーが表示された場合でも、ダウンロードは終了しません。なぜ、そしてそれについて何ができるのか、何か考えはありますか?

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

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

私の知る限り、ホームボタンを押すと次のようになります。

applicationWillResignActive
applicationDidEnterBackground

そして、3分後にアプリを思い出した後、次のようになります。

applicationWillEnterForeground

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

バックグラウンドに長く(5分)置いておくと、エラーが発生してタイムアウトになります。

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

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

4

1 に答える 1

6

私の推測では、アプリがバックグラウンドに入るときに接続が実行されており、実行を維持するための正しい実装がなかったため、接続が切断されています。たぶん、Appleのバックグラウンド実行とマルチタスクのドキュメントを見てください。アプリを終了せずに最大約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;
    });
}
于 2012-11-07T04:13:48.093 に答える