URLSession下载任务委托仅在所有任务完成后调用

时间:2014-11-08 20:25:28

标签: objective-c nsurlsession nsurlsessiondownloadtask

我有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作为键。任务完成时,将在委托方法中从字典中删除下载任务。该词典主要用于跟踪进度和取消任务。

1 个答案:

答案 0 :(得分:0)

似乎此行为特定于iOS模拟器,以及NSURLSession中的一些其他奇怪行为。当我在设备上运行代码时,一切都按原样运行。

相关问题