我有NSURLSession
一个后台配置同时下载两个或三个文件。除了委托方法之外,一切似乎都运行良好
-(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
以 URL 为键的 a 中。当任务完成时,下载任务将从委托方法中的字典中删除。字典主要用于跟踪进度和取消任务。