2015-07-10 20 views
9

Benim kod aşağıdaki gibi isteği GET yapar: İstek bitmedenSwift'de devam etmekte olan HTTP isteği nasıl iptal edilir?

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

viewWillDisappear() Eğer çağrılan, talep durdurmak istiyorum.

Şu anda, istek bitmeden görünüm kaybolmuyor gibi görünüyor. Devam eden GET/POST isteğini iptal etmenin bir yolu var mı?

cevap

15

Evet, ancak dış erişim için saklamanız gerekiyor - task, resume() kullanıyormuşsunuz gibi kullanabileceğiniz cancel() yöntemine sahiptir. var currentTask: NSURLSessionTask?, sen self.currentTask = ... yerine let task = ... ve senin viewDidDisappear() sen self.currentTask?.cancel() çağırır içinde olurdu senin sevk içinde -

viewDidDisappear() ben nesne özelliği olarak sahip öneriyoruz.

İlgili konular