我有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作为键。任务完成时,将在委托方法中从字典中删除下载任务。该词典主要用于跟踪进度和取消任务。
答案 0 :(得分:0)
似乎此行为特定于iOS模拟器,以及NSURLSession中的一些其他奇怪行为。当我在设备上运行代码时,一切都按原样运行。