如何处理完成处理程序块中取消的 NSURLSessionTask ?
Posted
技术标签:
【中文标题】如何处理完成处理程序块中取消的 NSURLSessionTask ?【英文标题】:How does one deal with a cancelled NSURLSessionTask in the completion handler block? 【发布时间】:2014-10-16 18:27:55 【问题描述】:如果我创建一个NSURLSessionDownloadTask
,然后在它完成之前取消它,完成块似乎仍然会触发。
let downloadTask = session.downloadTaskWithURL(URL, completionHandler: location, response, error in
...
如何检查下载任务是否在此块内被取消,以便在没有下载任务时不会尝试对结果下载进行操作?
【问题讨论】:
【参考方案1】:对于下载任务,将使用location
的nil
值调用完成处理程序,URLError
对象的code
值将是.cancelled
。例如:
let task = session.downloadTask(with: url) location, response, error in
if let error = error as? URLError
if error.code == .cancelled
// canceled
else
// some other error
return
// proceed to move file at `location` to somewhere more permanent
task.resume()
或者查找NSURLErrorCancelled
的NSError
对象的code
值:
let task = session.downloadTask(with: url) location, response, error in
if let error = error as NSError?
if error.code == NSURLErrorCancelled
// canceled
else
// some other error
return
// proceed to move file at `location` to somewhere more permanent
task.resume()
数据任务的error
参数的转换过程与上面的下载任务相同。
对于 Swift 2,请参阅 previous revision of this answer。
【讨论】:
下载任务怎么样?位置会为零吗?还是我应该只依赖错误? 是的,location
将是 nil
,但您可以检查 error
,如果 code
是 NSURLErrorCancelled
,您知道它已因某种原因被取消.以上是关于如何处理完成处理程序块中取消的 NSURLSessionTask ?的主要内容,如果未能解决你的问题,请参考以下文章
如何处理本机模式取消/错误事件(cordova-plugin-purchase)?