2016-11-24 64 views
5

我想在後臺應用程序中取消Http連接。在iOS中取消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() 

} 

如何隨時隨地取消它的計劃?

+0

task.cancel()或你的意思是? –

+0

'task.cancel()' – Adam

+0

ViewController中的defince任務如何? – amirelo

回答

1

一種方法是保留對任務的引用,而不是本地的「任務」。

例如,您的viewDidLoad之外創建:

var taskToReference: NSURLSessionDataTask! 

然後改變的,而不是你的let task = URLSession...代碼,而不是做taskToReference = URLSession...

現在你有一個參考變量,你可以在你的視圖控制器中的任何地方使用。只需在班上的任何地方進行taskToReference.cancel()

要做到這一點,你可以從整個應用程序的任何視圖來做這件事,而不是在你的類中創建var,而是在你的AppDelegate中創建它,並在那裏保存參考!

在你的應用程序代理:

let appDelegate = UIApplication.shared.delegate as! AppDelegate 

您最初的任務然後換:

var taskToReference: NSURLSessionDataTask! 
在您的viewDidLoad

然後,它引用了應用範圍VAR之前得到的應用程序委託的引用

appDelegate.taskToReference = URLSession...