を使用して複数のビデオをダウンロードするために、バックグラウンド転送サービスを使用していNSURLSession
ます。アプリがバックグラウンド モードの場合、ダウンロードは正常に機能しており、満足しています。私の問題は、キューからダウンロードされた各ビデオのコールバックが必要なことです。
ダウンロードしたビデオごとに次のメソッドが呼び出されることを期待していました。
-(void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier
completionHandler:(void (^)())completionHandler
バックグラウンド転送後にアプリに送信するメッセージがシステムにない場合は、次の方法を使用します。
-(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session
ただし、すべてのダウンロードが完了すると、両方のメソッドが呼び出されます。ダウンロード用に 3 つのビデオを配置し、アプリをバックグラウンドに置きます。3 つのビデオがすべてダウンロードされた後に、両方のメソッドが呼び出されました。
これらのメソッドで私がやっていることは次のとおりです。
AppDelegate
-(void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier
completionHandler:(void (^)())completionHandler
{
self.backgroundTransferCompletionHandler = completionHandler;
}
ダウンロードViewController
- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.backgroundTransferCompletionHandler)
{
void (^completionHandler)() = appDelegate.backgroundTransferCompletionHandler;
appDelegate.backgroundTransferCompletionHandler = nil;
completionHandler();
}
NSLog(@"All tasks are finished");
}
各ビデオのダウンロード時にユーザーにローカル通知を表示することは可能ですか? または、バックグラウンドですべての動画のダウンロードが完了するまで待つ必要がありますか?
答えがNOの場合、私の質問は、これら 2 つの異なるコールバックの目的は何ですか? それらを互いに分離するものは何ですか?