如何在移动到另一个UIViewController时取消NSURLSession

时间:2017-02-26 15:32:07

标签: swift uiviewcontroller nsurlsession nsurlsessiondatatask

我正在使用NSURLSession进行API调用。一旦API被点击,在获得响应之前我将转移到另一个视图控制器。如何阻止当前视图控制器中运行的所有NSURLSession?请指导我。

我的示例代码无效。如果我移动到另一个UIViewController,则新会话创建并正常工作,但之前的UIViewControllers's会话正在恢复。如何停止该会话?请指导我。

示例获取API Cal:

var testSession = NSURLSession.sharedSession()
var testTask = NSURLSessionDataTask()


override func viewDidAppear(animated: Bool) {

        testTask = testSession.dataTaskWithURL(NSURL(string: "http://httpbin.org/get")!, completionHandler: { (data, response, error) -> Void in
            do{
                let str = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [String:AnyObject]
                print(str)
            }
            catch {
                print("json error: \(error)")
            }
        })
        testTask.resume()
    }


override func viewDidDisappear(animated: Bool) {

        testTask.cancel()
        testSession.finishTasksAndInvalidate()
    }

1 个答案:

答案 0 :(得分:0)

不要使用共享会话。使用您明确创建的真实会话。当您不再需要任何待处理请求时,请在会话中调用invalidateAndCancel