2012-06-19 6 views
13

私はサーバーからデータをダウンロードしているアプリケーションを作成しています。バックグラウンドでは、データをダウンロードできるように接続を継続する必要があります。私は、この方法は、アプリケーションがバックグラウンドに入ったときに呼び出されappDelegateバックグラウンドで継続ダウンロード

- (void)applicationDidEnterBackground:(UIApplication *)application 

であることがわかっています。しかし、接続はviewControllerで作成されるので、どのようにして管理できますかappDelegate
これは他にもできますか?私はthisリンクを通過しましたが、実装が簡単なものがありますか?

+0

、THREは、他の方法は、私はあなたがこのリンクをチェックする必要があります –

+0

を知っている限りではないhttp://stackoverflow.com/questions/4579810/ios-application-background-downloading – swiftBoy

答えて

14

バックグラウンドでいくつかの操作を行う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]; 
+1

ASIHttpRequestプロパティーを設定できます。[request setShouldContinueWhenAppEntersBackground:YES]; – HelloWorld

+0

ありがとうございました!!!私が間違っている場合は私を修正してください:結論として、バックグラウンドまたはフォアグラウンドでタスクを実行するとほとんど違いはありません。どちらもこのコードで実行されます。しかし、2つの違いが思い浮かぶ:1。**あなたのバックグラウンドタスクが長すぎる場合、多分あなたは終了する前に終了するでしょう! 2. 'endBackgroundTask:taskId'よりも優れているので、余分なバッテリーを節約できます。 – Honey

4

[編集] 申し訳ありませんが、あなたのアプリがバックグラウンドに入る前に操作を実行しなければならない時間制限を延長することができます。ここがありますApple's Official Documentation

+0

これは正しくありません。[有限長タスク](http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/)を実行できます。 doc/uid/TP40007072-CH4-SW28)をバックグラウンドで最大10分間実行します。 – rckoenes

+0

@rckoenesあなたは本当に正しいです、私の謝罪。私は私の答えを編集します。情報をありがとう:) – bennythemink

+0

まだ実際には、あなたは['beginBackgroundTaskWithExpirationHandler:'](http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html# //有限長タスクを実行する前に、// apple_ref/occ/instm/UIApplication/beginBackgroundTaskWithExpirationHandler :)を実行します。バックグラウンドで作業を実行する必要はありません。あなたのアプリがバックグラウンドにプッシュされる前に、タスクを開始することができます。 – rckoenes

1

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

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

それは動作します。

HereあなたはASIHTTPRequestが

はそれが役に立てば幸いどのように動作するかを見ることができます!

+0

メッセージ[ここ](http://allseeing-i.com/ASIHTTPRequest/)によると、ASIHTTPRequestはもはや積極的に開発されていません。ただ言って。 – zero0cool

+0

本当ですが、それはまだ魅力のように機能します。私はASIHTTPRequestと同じくらい多くの機能を備えた良い選択肢は見つけられていません。 – Thermometer

関連する問題