Alamofire: isErfolg immer wahr, auch mit Fehlercode

Erstellt am 11. Okt. 2015  ·  3Kommentare  ·  Quelle: Alamofire/Alamofire

Der Server sendet den Antwortcode 404, aber es sieht so aus, als würde das Framework ihn als Erfolg interpretieren.

Code:

Alamofire.request(.GET, Constants.Path.rootUrl + "/api/users", parameters: ["username" : usernameString, "limit":3] , headers: ["tb-token" : userToken!])
            .responseJSON { response in


                print(response.request)  // original URL request
                print(response.response) // URL response
                print(response.data)     // server data
                print(response.result)   // result of response serialization


                let results = response.result

                if let JSON = response.result.value {

                    if response.result.isSuccess == true {
                        print("Success with JSON: \(JSON)")
                        self.tableView.hidden = false

                        self.resultsDict = results.value as! NSArray

                        let resultsNumber = results.value!.count

                        self.numberOfResults.text = "Results(\(resultsNumber))"
                        self.numberOfResults.hidden = false

                        self.resultsN = resultsNumber
                        self.loadedMode = true


                        self.tableView.reloadData()
                        self.tableView.hidden = false
                    }
                }
                    else {print("error")}

        }

isSuccess ist immer wahr, egal welchen Code der Server zurücksendet.

question response serializer

Alle 3 Kommentare

Standardmäßig registriert Alamofire jede Antwort, die den Antwort-Serializer durchläuft (in Ihrem Beispiel das JSONResponseSerializer das von .responseJSON ) als Erfolg. Wenn Sie den Antwortcode Ihrer Anfrage validieren möchten, fügen Sie einfach .validate() zu Ihrer Anfragekette hinzu. Dadurch wird sichergestellt, dass Ihr Antwortcode zwischen 200 und 299 (einschließlich) liegt. Sie können die Validierung auch mit den in der Dokumentation beschriebenen Methoden anpassen.

In deinem Fall:

Alamofire.request(.GET, Constants.Path.rootUrl + "/api/users", parameters: ["username" : usernameString, "limit":3] , headers: ["tb-token" : userToken!])
            .validate()
            .responseJSON { response in }

Danke, hat wie ein Zauber funktioniert!

Danke, hat funktioniert. Mit .validate() die Antwort validiert.
Aber es gibt noch ein anderes Problem, mit .validate() bekomme ich den Antwortwert nicht: response.result.value .
Gibt es eine Lösung oder einen Workaround?
Vielen Dank

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen