2016-03-31 31 views
0

Ich verwende Alamofire, um HTTP-Anfrage in meiner App zu senden. Ich benutze einen TabBarViewController, in der ViewDidLoad der ersten Ansicht, ich sende eine Anfrage. Auch in ViewWillDisappear sende ich eine weitere Anfrage. Allerdings habe ich festgestellt, dass es sich unerwartet verhält, wenn ich die Tabs ändere.Http Anfrage mit Alamofire

func sendHttpCommand(parameter: NSDictionary) { 
    Alamofire.request(.GET, URL, parameters: (parameter as! [String: AnyObject])) 
      .response { 
       request, response, data, error in 
       print(request) 
      } 
} 

viewDidLoad() { 
    let dict: NSDictionary = ["value": 0] 
    sendHttpCommand(dict) 
} 

viewWillDisappear(animated: Bool) { 
    let dict: NSDictionary = ["value": 1] 
    sendHttpCommand(dict) 
} 

Wenn ich die Tabs wechseln, in Normalfall, meine Konsole

Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 

jedoch ausdrucken, wenn ich den Tabs schnell genug Schale, meine Konsole auszudrucken

Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 

Irgendwelche Ideen?

Antwort

2

Die Alamofire-Anforderungen werden asynchron ausgeführt.

hier lesen asyncs und Synchronisationen zu verstehen: Difference between dispatch_async and dispatch_sync on serial queue?

Sie können Ihre alamofire Anfrage abbrechen, wenn Sie auf die Registerkarte und die Anforderung ändern nicht abgeschlossen ist. Dazu benötigen Sie einen Alamofire Manager.

+0

Wie kann ich die Anfrage in Auftrag geben? Ich habe versucht, 'dispatch_group' zu verwenden. Allerdings scheint ich nicht zu arbeiten. [link] (http://stackoverflow.com/questions/28100847/checking-for-multiple-asynchronous-response-from-alamofire-and-swift) – WeiJay

+0

Sie müssen die nächste Anfrage in Ihrem Antworthandler aufrufen. Oder verwenden Sie einen Delegaten und feuern Sie ihn in Ihrem Antworthandler ab, um die nächste Anfrage zu starten. Sie können Ihre Anfrage auch abbrechen, wenn der Benutzer den Tab http://stackoverflow.com/questions/26305707/how-to-pause-resume-cancel-my-download-request-in-alamofire ändert – Sebi

Verwandte Themen