IOS取消NSURLConnection的夫特
问题描述:
我有以下代码:IOS取消NSURLConnection的夫特
func getStoryContent(cityID : String, completionHandler: (loaded: Bool, dataNil: Bool) ->()) ->() {
let scriptUrl = "***"
var user_id = "nil"
if let userID = NSUserDefaults.standardUserDefaults().stringForKey("userId") {
user_id = userID
}
var params = ***
let myUrl = NSURL(string: scriptUrl);
let request: NSMutableURLRequest = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let data = params.dataUsingEncoding(NSUTF8StringEncoding)
request.timeoutInterval = 10
request.HTTPBody=data
request.HTTPShouldHandleCookies=false
let queue:NSOperationQueue = NSOperationQueue()
NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in
do {
....code.....
显示图像的幻灯片给用户时,该程序在后台运行,它基本上下载多个图像被显示并且将它们附加到阵列图片。问题是用户可以随时退出幻灯片,在这种情况下,我需要取消这个NSURLConnection
。我有一个函数在用户想要退出幻灯片时执行,但我不确定要添加什么代码才能正确取消此连接。
答
NSURLConnection
的sendAsynchronousRequest
不是一个可取消的请求。但是,NSURLConnection
已弃用,无论如何,您应该使用NSURLSession
。 NSURLSession
的dataTask
是可以撤消的。
因此,而不是:
NSURLConnection.sendAsynchronousRequest(request, queue: queue) { response, data, error in
do {
....code.....
}
}
您可以使用:
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
do {
....code.....
}
}
task.resume()
而且,如果您需要取消它,你可以做task.cancel()
。
我可以继续使用完成处理程序,它是我需要的代码部分 – Alk
是的,就像我上面所说明的那样。注意,参数的顺序是不同的,但是首先使用'data'。但除此之外,它非常相似。关于队列,'sharedSession'默认为一个串行背景队列(但如果你想指定你自己的队列,你可以使用'NSURLSessionConfiguration'实例化你自己的'NSURLSession')。但是默认的后台队列应该可以。 – Rob