我正在使用后台传输服务下载多个视频NSURLSession
。当应用程序处于后台模式时下载工作正常并且我对此感到满意。我的问题是,我想为从队列中下载的每个视频进行回调。
我期待为每个下载的视频调用以下方法:
-(void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier
completionHandler:(void (^)())completionHandler
当系统在后台传输后没有更多消息要发送到我们的应用程序时,请使用以下方法:
-(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session
但是,当所有下载完成时,这两种方法都会被调用。我放了 3 个视频供下载,然后将 App 放在后台。下载所有 3 个视频后调用这两种方法。
这是我在这些方法中所做的:
应用委托
-(void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier
completionHandler:(void (^)())completionHandler
{
self.backgroundTransferCompletionHandler = completionHandler;
}
下载视图控制器
- (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");
}
是否可以在下载每个视频时向用户显示本地通知?或者,我必须等到所有视频在后台完成下载?
如果答案是否定的,那么我的问题是这两个不同回调的目的是什么?是什么将它们彼此分开?