2

假设我创建了一个NSURLSessionDownloadTask

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

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

我无法检查下载任务本身的状态,因为它在变量的创建中。

4

2 回答 2

0

检查error完成处理程序中的参数。或检查NSURLSessionTaskstate属性。如果它等于 'NSURLSessionTaskState.Completed' 则下载任务不会被取消。文档说:

任务已经完成(没有被取消),并且任务的委托不再接收回调。如果任务成功完成,则任务的错误属性为 nil。否则,它会提供一个错误对象来告诉您出了什么问题。此状态下的任务不会超时。

于 2014-10-16T13:55:32.687 回答
0

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

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

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

于 2014-10-16T14:33:39.217 回答