2014-11-08 66 views
0

我有一个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与网址的关键。当任务完成时,下载任务将从委托方法的字典中删除。字典主要用于跟踪进度和取消任务。

回答

0

看起来这种行为是特定于iOS模拟器,以及NSURLSession中的一些其他奇怪行为。当我在设备上运行代码时,一切都按照应有的方式运行。