NSURLSession,多数据任务,completionHandler

Posted

技术标签:

【中文标题】NSURLSession,多数据任务,completionHandler【英文标题】:NSURLSession, multiple data tasks, completionHandler 【发布时间】:2015-10-11 00:24:13 【问题描述】:

我想使用 NSURLSessiondataTaskWithURL:completionHandler: 将 4 个不同的 URL 下载到 NSData 对象中。我知道我可以打电话:

[session dataTaskWithURL completionHandler:^(NSData* data, NSURLResponse* response, NSError* error) 
    // handler
];

一旦将这些添加到会话中,我知道我可以使用[task resume] 开始它们。有什么方法可以让会话简单地启动我添加到其中的所有任务?

但是当所有四个都完成时(出现错误或其他情况),我怎样才能得到通知?我是否需要保留某种线程安全字典来跟踪每个任务的状态?

我的目的是,一旦下载了这些,我需要启动一个计时器,以便将来某个时候可以再次下载相同的四个 URL。

【问题讨论】:

【参考方案1】:

    不,无法同时启动多个任务。

    是的,您需要保留一个字典来存储响应,使用数据任务作为键。为安全起见,在主线程上执行所有修改和访问。

您也可以考虑使用调度组,如this question 中所述。

【讨论】:

以上是关于NSURLSession,多数据任务,completionHandler的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSURLSession 如何在取消下载任务时获取接收到的数据或临时文件位置

iOS NSURLSession 使用自定义委托处理数据任务的完成

具有无效简历数据的 NSURLSession

我们可以为 NSURLSessionTaskDelegate 设置一个自定义委托对象吗

无法在 iOS 中使用 NSURLSession 多部分表单数据上传文件

NSURLSession 后台任务:避免重复