在iOS中取消HTTP连接

时间:2016-11-24 13:58:36

标签: ios swift nsurlsession

我想在后台应用程序中取消Http连接。

这是我的代码:

override func viewDidLoad() {
   super.viewDidLoad()
   let url = URL(string: "my url")
   let task = URLSession.shared.dataTask(with: url!) { data, response, error in
        guard error == nil else {
            print(error)
            return
        }
        guard let data = data else {
            print("Data is empty")
            return
        }
        do {
            if let jsonResult = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary {
                print("ASynchronous\(jsonResult)")
            }
        } catch let error as NSError {
            print(error.localizedDescription)
        }
    }

    task.resume()

}

如何在程序中的任何位置取消它?

1 个答案:

答案 0 :(得分:1)

执行此操作的方法是保留对任务的引用,而不是本地的任务'。

例如,在viewDidLoad之外创建:

var taskToReference: NSURLSessionDataTask!

然后更改代码而不是let task = URLSession...代替taskToReference = URLSession...

现在您有一个可以在视图控制器内的任何位置使用的引用var。只需在班上的任何地方taskToReference.cancel()

要在整个应用程序中从任何视图中执行此操作,而不是在类中创建var,请在AppDelegate中创建并在那里保留引用!

在你的app delegate:

var taskToReference: NSURLSessionDataTask!

然后在viewDidLoad中,在引用app-wide var之前获取对app delegate的引用:

let appDelegate = UIApplication.shared.delegate as! AppDelegate

然后将您的初始任务更改为:

appDelegate.taskToReference = URLSession...