假设我创建了一个NSURLSessionDownloadTask
:
let downloadTask = session.downloadTaskWithURL(URL, completionHandler: { location, response, error in
...
}
如果我稍后在下载任务上调用cancel()
,它仍会调用完成处理程序,对吧?我想检查下载任务的状态是否为Cancelling
,以便它不会尝试弄乱下载的图像,在这种情况下不会是一个。
我无法在创建变量时检查下载任务本身的状态。
答案 0 :(得分:0)
检查完成处理程序中的error
参数。或者查看NSURLSessionTask
的{{1}}财产。如果它等于'NSURLSessionTaskState.Completed',则不会取消下载任务。文档说:
任务已完成(未被取消)和任务 代表不再收到回调。如果任务完成 成功,任务的错误属性为零。否则,它提供 一个错误对象,告诉出了什么问题。这种状态下的任务是 不会超时。
答案 1 :(得分:0)
完成处理程序只会在任务完成时执行,因此您可以在实例化时实际使用它。为什么不利用捕获列表强制弱循环:
let downloadTask = session.downloadTaskWithURL(URL, completionHandler: [weak downloadTask] { location, response, error in
...
}
请记住,任务状态可能在处理程序内completed
,因此您应该检查的是错误参数