NSURLSession 在所有任务完成时通知

NSURLSession notify when all tasks are completed

我一直在通读文档并在线查找,但未能找到执行此操作的方法。目前,我正在一个会话中创建 20 个任务,并且希望有一种方法仅在该会话的所有 20 个任务都完成时才执行某种回调。有没有办法做到这一点?我查看了很多委托方法,但没有发现任何有趣的东西。

我认为你需要自己跟踪这个。考虑保留一个任务对象数组。当您启动任务时,将任务对象添加到数组中。任务完成后,从数组中删除任务对象。

当您到达数组中的零个任务时,您就完成了。

如果您按顺序调用这些任务,您必须做的就是在前一个任务结束于 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location 时生成下一个任务,同时跟踪计数器变量。例如:

- (void)URLSession:(NSURLSession *)session
      downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location{

    //Write your file to disk here

    //-nextResource will return the next resource in your array or nil
    NSURL *nextResource = [self nextResource]; 

    if(nextResource)
        [self downloadResourceWithURL:nextResource];

}