2015-11-23 14 views
6

Ich habe Fragen zu Alamofire Timeout-Methoden, vor allem, mein Englisch möglicherweise nicht gut genug, damit Sie verstehen, was ich sagte ... aber ich werde müde, meine FrageSwift 2.1 alamofire Timeout-Methode

zu erklären

in meinem Projekt, ich Alamofire, aus irgendeinem Grund, muss ich sicherstellen, dass meine App funktioniert von schlechten Anschlussbereich. Also denke ich mit Timeout-Methode.

ich sah, es gibt einige Leute gesagt, verwenden Lösung 1:

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
    configuration.timeoutIntervalForRequest = 2 // seconds 
    self.alamofireManager = Alamofire.Manager(configuration: configuration) 
    self.alamofireManager!.request(.GET, "http://example.com/") 
.response { (request, response, data, error) in 

wird das Problem gelöst, aber in meinem Fall sah ich den Bereich debug sagte meine Anfrage "cancel"

so habe ich versucht, eine andere Lösung, die ich hier gesehen auf (Stackoverflow) Lösung 2:

let manager = Alamofire.Manager.sharedInstance 
    manager.session.configuration.timeoutIntervalForRequest = 5 
    manager.request(.POST, url, parameters: params, encoding: .JSON, headers: nil).response(queue: dispatch_get_main_queue()) { (Request, res, data, error) -> Void in{} 

diese Methode sollte funktionieren scheint, aber nur, wenn i Lassen Sie meine App zum Hintergrund und reagierte meine App, die Debug-Bereich zeigen Anfrage "Timeout", sonst der Debug-Bereich zeigte nichts, es sei denn, ich schalte es in den Hintergrund und reagiere auf die App.

Ich bin mit Xcode 7.1 und ios 9.0

UPDATE: wenn ich Lösung 2 verwendet, wenn ich die request lassen = 5, wird der Debug-Bereich zeigt die „Timeout-Fehler“, aber es mehr eingenommen hat, als 5 Sekunden ... manchmal zeigt es etwa 30 Sekunden, aber manchmal mehr als 1 Minute ....

UPDATE2: Ich habe herausgefunden, was das Problem ist. Das Problem ist, wenn Sie das Erreichbarkeits-Framework verwenden, um den Verbindungsstatus zu erkennen, dann erkennt das System möglicherweise die Verbindung zuerst oder nicht, dann zeigt es das Anfrage-Timeout nach dem isReachable (es kann bis zu 1 Minute dauern).

+0

@oleg Sie danken zu erklären, in meinem Fall, ich habe versucht, mein Projekt arbeitet schlecht connect Bereich, wie zum Beispiel U-Bahn zu machen oder U-Bahn Tunnel. Also habe ich das Developer-Kit auf iPhone-Einstellung geöffnet, wo Netzwerk-Link-Conditioner. Machen Sie die Konfiguration als 100% Verlust. Also weiß ich nicht, warum es so lange gedauert hat, bis ich weiß, dass es Timeout ist. –

+0

Konnten Sie eine funktionierende Lösung finden? –

Antwort

0

Basierend auf NSURLSessionConfiguration Class Reference

Diese Eigenschaft bestimmt die Anforderung Timeout-Zeit für alle Aufgaben innerhalb Sitzungen auf dieser Konfiguration basiert. Das Anforderungstimeout Intervall steuert, wie lange (in Sekunden) eine Aufgabe warten soll, bis zusätzliche Daten ankommen, bevor sie aufgeben. Der diesem zugeordnete Timer wird zurückgesetzt, sobald neue Daten eintreffen. Wenn der Anforderungstimer das angegebene Intervall erreicht, ohne neue Daten zu empfangen, löst er eine Zeitüberschreitung aus.

Der Timer wird zurückgesetzt, sobald neue Daten eintreffen und deshalb haben Sie eine andere Fehlerzeit.

Auch Sie könnten einen weiteren Parameter für die Anforderung festgelegt:

manager.session.configuration.timeoutIntervalForResource = 5