2015-07-10 6 views
9

Mein Code funktioniert Anfrage wie folgt GET:Wie kann die laufende HTTP-Anfrage in Swift abgebrochen werden?

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

Wenn viewWillDisappear() aufgerufen wird, bevor die Anforderung abgeschlossen ist, möchte ich die Anfrage stoppen.

Im Moment scheint es, als ob die Ansicht nicht verschwindet, bevor die Anfrage beendet wird. Gibt es eine Möglichkeit, die laufende GET/POST Anfrage abzubrechen?

Antwort

15

Ja, aber Sie müssen es für den Zugriff von außen speichern - die task hat eine Methode cancel(), die Sie verwenden können, genau wie Sie resume() verwenden.

Für viewDidDisappear() würde ich empfehlen, es als Objekt Eigenschaft - var currentTask: NSURLSessionTask?, in Ihrem Versand Sie self.currentTask = ... statt let task = ... und in Ihrem viewDidDisappear() Sie nennen würde self.currentTask?.cancel() haben würde.