2012-02-06 8 views
18

私は文字通り数週間、答えを見つけようとしています。これを行う方法の例です。フォアグラウンドでNSURLConnectionとの接続をバッ​​クグラウンドで継続するにはどうしたらいいですか?

NSURLConnectionのすべてのサンプル/チュートリアルでは、バックグラウンドで開始するか、バックグラウンドで開始するかを示します。beginBackgrounTaskWithExpirationHandler:背景を入力した後にバックグラウンドタスクを開始する方法を示します。

私が知る限りでは、フォアグラウンドで接続を開始する方法を示すインターネットや書籍はありません。

この質問への答えは実際に質問に答えていません:あなたは基礎部分を越えてreferened読めば

How should beginbackgroundtaskwithexpirationhandler: be dealt with for an NSUrlConnection that is already in progress?

それは言う:「アプリがフォアグラウンドにある間は、バックグラウンドタスクは」勝ちました何の効果もありません "。つまり、フォアグラウンドでダウンロードしたい場合は、NSURLConnectionを使用してバックグラウンドタスクを開始することはできません。

+0

文書はアプリがフォアグラウンドにある間は、バックグラウンドタスクは何の効果もないだろう」と言う。しかし、ユーザーがアプリをバックグラウンドに移動させると、バックグラウンドタスクの存在によって自動的にアプリが実行され、操作が完了します。これは、バックグラウンドタスクがどのように機能するか、私にとっては理にかなっています。フォアグラウンドでタスクを開始すると(たとえばファイルをダウンロードするなど)、バックグラウンドに入るとネットワーク接続を切断せずにダウンロードタスクを完了します。 – sbs

答えて

38

beginBackgroundTaskWithExpirationHandler:を呼び出してください。あなたのアプリケーションはダウンロードプロセスを開始するとすぐにフォアグラウンドになります。あなたはIVAR /プロパティに戻り値を格納する必要があることに注意してください:

@property (nonatomic, assign) UIBackgroundTaskIdentifier backgroundTaskID; 

@synthesize backgroundTaskID; 

... 

NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 
self.backgroundTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
    // Cancel the connection 
    [connection cancel]; 
}]; 

これは、ダウンロードが実行されている間、それがバックグラウンドに送信されます場合は、アプリケーションが実行し続けることができます。次に、ダウンロードが完了したことを意味し、あなたのデリゲートメソッドでは、あなたが一致endBackgroundTask:を配置する必要があります。

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    // Handle the error 
    ... 

    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskID]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    // Save the downloaded data 
    ... 

    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskID]; 
} 
+0

このメソッドを試しただけで、NSURLConnectionで魅力的に機能します!ありがとう! – sbs

+0

現在、この方法はiOS 7以降、バックグラウンドで3分間動作していることに注意してください。 – CGR

関連する問題