2016-11-24 39 views
5

Arka planda uygulamada Http bağlantısını iptal etmek istiyorum.iOS'ta HTTP bağlantısını iptal et

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() 

} 

nasıl programında yerde iptal ederim: Burada

benim kodudur?

+0

task.cancel() veya ne demek istiyorsunuz? –

+0

'task.cancel()' – Adam

+0

ViewController'daki defince görevi nasıl? – amirelo

cevap

1

Bunu yapmanın bir yolu, yerel göreviniz yerine göreve bir başvuru tutmaktır. senin viewDidLoad dışında Örneğin

oluşturmak:
var taskToReference: NSURLSessionDataTask! 

Sonra yerine taskToReference = URLSession... yapmak yerine let task = URLSession... sizin kodunu değiştirmek.

Artık, görünüm denetleyicinizin herhangi bir yerinde kullanabileceğiniz bir başvuru var var. Sınıfınızda her yerde taskToReference.cancel() yapın.

Uygulamanız boyunca ANY görünümünden yapabileceğiniz bir şey yapmak için, sınıfınızda var olanı oluşturmak yerine AppDelegate uygulamasında oluşturun ve referansı burada tutun!

let appDelegate = UIApplication.shared.delegate as! AppDelegate 

Ardından için ilk görevi değiştirin:: En viewDidLoad Sonra

var taskToReference: NSURLSessionDataTask! 

, uygulama genelinde Var referans önce uygulama temsilcinize bir başvuru olsun: uygulama temsilcinize olarak

appDelegate.taskToReference = URLSession...