如何在完成处理程序块中检查NSURLSessionDownloadTask的状态?

时间:2014-10-16 13:46:44

标签: ios cocoa-touch swift nsurlsession nsurlsessiondownloadtask

假设我创建了一个NSURLSessionDownloadTask

let downloadTask = session.downloadTaskWithURL(URL, completionHandler: { location, response, error in
    ...
}

如果我稍后在下载任务上调用cancel(),它仍会调用完成处理程序,对吧?我想检查下载任务的状态是否为Cancelling,以便它不会尝试弄乱下载的图像,在这种情况下不会是一个。

我无法在创建变量时检查下载任务本身的状态。

2 个答案:

答案 0 :(得分:0)

检查完成处理程序中的error参数。或者查看NSURLSessionTask的{​​{1}}财产。如果它等于'NSURLSessionTaskState.Completed',则不会取消下载任务。文档说:

  

任务已完成(未被取消)和任务   代表不再收到回调。如果任务完成   成功,任务的错误属性为零。否则,它提供   一个错误对象,告诉出了什么问题。这种状态下的任务是   不会超时。

答案 1 :(得分:0)

完成处理程序只会在任务完成时执行,因此您可以在实例化时实际使用它。为什么不利用捕获列表强制弱循环:

let downloadTask = session.downloadTaskWithURL(URL, completionHandler: [weak downloadTask] { location, response, error in
    ...
}

请记住,任务状态可能在处理程序内completed,因此您应该检查的是错误参数