12

サーバーからデータをダウンロードするアプリケーションを作成しています。バックグラウンドで動作している間、データをダウンロードできるように接続を継続する必要があります。appDelegateにメソッドがあることは知っています

- (void)applicationDidEnterBackground:(UIApplication *)application  

アプリケーションがバックグラウンドに入ったときに呼び出されます。しかし、接続は viewController で作成されるため、 appDelegateでどのように管理できますか?
また、これを行うことができる他の方法はありますか?このリンクを確認しましたが、実装が簡単なものはありますか?

4

3 に答える 3

15

バックグラウンドで継続する操作を実行する 1 つの方法は、ダウンロードを実行する別のスレッドを作成することです。スレッド内で、beginBackgroundTaskWithExpirationHandler: と endBackgroundTask の呼び出しの間にダウンロード操作をまとめます。バックグラウンドで実行されているかどうかを確認する必要はありません。常にこれら 2 つのメソッドを呼び出すだけです。

// Tell iOS this as a background task in case we get backgrounded
UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] 
          beginBackgroundTaskWithExpirationHandler:NULL];

//----------------------------------------------
// Perform your download operations here
//----------------------------------------------
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

// Tell iOS that we are done with stuff that needed to keep going even if backgrounded    
[[UIApplication sharedApplication] endBackgroundTask:taskId];
于 2012-06-27T01:32:10.420 に答える
3

[編集] コメントで指摘されたように、申し訳ありませんが、アプリがバックグラウンドに入る前に、操作を実行する必要がある制限時間を延長できます。Appleの公式ドキュメントはこちら

于 2012-06-19T12:30:28.733 に答える
1

データのダウンロードを正確にどのように処理するかわかりません。しかし、 ASIHTTPRequestを見ることができます。これは非常に単純明快で、コンパイラ フラグを-fno-objc-arcに設定すると ARC で動作します。これで、あなただけを使用する必要があります

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setShouldContinueWhenAppEntersBackground:YES]; //For iOS 4.0 and up 

そして、それは機能します。

ここで、ASIHTTPRequest がどのように機能するかを確認できます

それが役に立てば幸い!

于 2012-06-26T12:15:54.027 に答える