我有一个NSURLSession
背景配置同时下载两个或三个文件。似乎一切都工作正常,除了所有的下载任务完成后,不单独为每一个完成时的委托方法URLSession下载任务完成后只调用任务
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
和
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error
只被调用。其他代理方法用于分别更新下载进度功能。
当我将NSURLSessionConfiguration
设置为defaultConfiguration
时,问题也不会发生,但后台下载显然不起作用。我错过了什么吗?我应该为每个下载任务分开NSURLSessions
?
编辑:根据要求,这里是创建会话和配置的代码。我已经包含了默认配置和后台会话配置,尽管在创建时只使用了一个。
if (!_backgroundURLSession) {
NSString *sessionID = [NSString stringWithFormat:@"%@.BackgroundSession", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]];
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:sessionID];
NSURLSessionConfiguration *defaultConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
_backgroundURLSession = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
}
对于启动任何下载,[_backgroundURLSession downloadTaskWithURL:[NSURL URLWithString:_url]]
用于创建一个NSURLSessionDownloadTask
,下载任务被存储在一个NSMutableDictionary
与网址的关键。当任务完成时,下载任务将从委托方法的字典中删除。字典主要用于跟踪进度和取消任务。