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