Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在Swift中取消正在进行的HTTP请求?_Ios_Swift_Cocoa Touch_Nsurlsession - Fatal编程技术网

Ios 如何在Swift中取消正在进行的HTTP请求?

Ios 如何在Swift中取消正在进行的HTTP请求?,ios,swift,cocoa-touch,nsurlsession,Ios,Swift,Cocoa Touch,Nsurlsession,我的代码不会得到这样的请求: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in // ... let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in if error != nil {

我的代码不会得到这样的请求:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
    // ...

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
        if error != nil {
            println("error = \(error)")
            return
        }

        if let HTTPresponse = response as? NSHTTPURLResponse {
            if HTTPresponse.statusCode == 200 { // Successfully got response
                var err: NSError?
                if let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: &err) as? [String : AnyObject] {
                    // Success decoding JSON
                } else {
                    // Failed -> stop activity indicator
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                        self.activityIndicator.stopAnimating()
                    })
                }
            }
            task.resume()
        })
    }
}
如果在请求完成之前调用了
viewwilldemouse()
,我想停止请求


现在,在请求完成之前,视图似乎不会消失。有没有办法取消正在进行的GET/POST请求?

是的,但您必须将其存储起来供外部访问-任务
有一个方法
cancel()
,您可以使用该方法,就像使用
resume()
一样

对于
viewdidenseal()
我建议将其作为对象属性-
var currentTask:NSURLSessionTask?
,在调度中,您将使用
self.currentTask=…
而不是
let task=…
,并在
viewdidenseal()
中调用
self.currentTask?.cancel()