如何在完成处理程序块中处理已取消的NSURLSessionTask?

时间:2014-10-16 18:27:56

标签: ios cocoa-touch swift nsurlsession nsurlsessiondownloadtask

如果我创建一个NSURLSessionDownloadTask,然后在它完成之前取消它,那么完成块似乎仍然会触发。

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

如何在此块中检查下载任务是否已取消,以便在没有下载任务时尝试对结果下载进行操作?

1 个答案:

答案 0 :(得分:27)

对于下载任务,将使用nil的{​​{1}}值调用完成处理程序,location对象的code值将为NSError 。在Swift 3中:

NSURLErrorCancelled

或者在Swift 2中:

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()

同样,对于数据任务,将使用let task = session.downloadTaskWithURL(url) { location, response, error in if let error = error { if error.code == NSURLErrorCancelled { // canceled } else { // some other error } return } // proceed to move file at `location` to somewhere more permanent } task.resume() / Error调用完成处理程序,以指示是否已取消。在Swift 3中:

NSError

或者在Swift 2中:

let task = session.dataTask(with: url) { data, 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()