2015-04-14 17 views
6

Ich versuche, die Yoda API zu verwenden und eine Anfrage mit dem Alamofire Swift-Framework zu senden. Ich weiß, dass die API korrekt funktioniert, da ich den Endpunkt mehrfach mit meinem Mashape-API-Schlüssel getestet habe. Ich kann auch sehen, dass die Anfragen gesendet werden (Homepage von Mashape unter meiner Bewerbung). Meine JSON-Antwort lautet jedoch immer nil.Alamofire Get Request und JSON Response

func handleRequest(words:String){ 
     var saying = words.stringByReplacingOccurrencesOfString(" ", withString: "+"); 
     saying = "?sentence=" + saying; 
     let url = NSURL(string: (baseURL+saying)); 
     println(url); 
     var response:String; 
     Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = additionalHeaders; 
     Alamofire.request(.GET, url!).responseJSON { (_, _, JSON, _) in 
      println(JSON); 

     } 
    } 

Die Worte String sein kann „Dies ist mein erster Satz“ und es wird die Räume mit „+“ gemäß der API-Spezifikation automatisch ersetzen. Bitte ignorieren Sie die multiplen println Anweisungen, sie sind nur zum Debuggen.

Dies ist nur ein Beweis für Konzept-Code, es absichtlich nicht viel Fehlerprüfung und ist nicht schön aus diesem Grund. Wenn Sie irgendwelche Vorschläge haben, würde ich sie schätzen.

+0

Es wird viel einfacher sein, Ihnen zu helfen, wenn Sie die tatsächliche URL verwenden können. –

+0

Sicher, ein Beispiel, das funktionieren würde, wie in die "url" Konstante https://yoda.p.mashape.com/yoda?sencenzement=You+wird+lernen+wie+zu+sprechen+wie+einem+Moment weitergegeben . ++ Oh + warte. –

+0

Das letzte Abschlussargument, das Sie gerade mit '_' ignorieren, ist ein' NSError', mit dem Sie überprüfen können, warum 'JSON' 'nil' ist. – mattt

Antwort

4

Aus irgendeinem Grund ist es ein Problem, das ich auch mit der Alamofire-Anfrage für JSON habe. Es ist die Art, wie ich die JSON-Anfragen mit Alamofire handhaben:

Alamofire.request(.GET, urlTo, parameters: nil, encoding: .URL).responseString(completionHandler: { 
     (request: NSURLRequest, response: NSHTTPURLResponse?, responseBody: String?, error: NSError?) -> Void in 

     // Convert the response to NSData to handle with SwiftyJSON 
     if let data = (responseBody as NSString).dataUsingEncoding(NSUTF8StringEncoding) { 
      let json = JSON(data: data) 
      println(json) 
     } 
}) 

ich Ihnen SwiftyJSON empfehlen dringend mit der JSON in eine bessere und einfache Weise zu verwalten, es ist bis zu Ihnen.

Ich hoffe, das hilft Ihnen.

+0

Ihr Code funktioniert, mit Ausnahme von Xcode als an der Besetzung in der If-Bedingung zu schreien. 'wenn Daten lassen = (Response wie! NSString)' Hinweis ** wie! ** statt ** ** als –

+0

Leider habe ich Xcode 6.3 –

+0

Es ist alles gut. Ich schätze die Antwort sehr, ersparte mir große Kopfschmerzen! –

4

Alamofire-Anfrage haben mehrere Methoden für die Antwort des Handle. Versuchen Sie, die Datenantwort zu verarbeiten und in String zu konvertieren. Bestätigen Sie, dass die Antwort JSON normal ist.

Alamofire.request(.GET, url!).response { (_, _, data, error) in 
    let str = NSString(data: data, encoding: NSUTF8StringEncoding) 
    println(str) 
    println(error) 
} 

Auch Checkout-Fehler beim Analysieren von JSON-Daten.

+0

Wäre besser, String (Daten: Daten, Codierung: NSUTF8StringEncoding) anstelle von NSString -Objekt zu verwenden – odemolliens

Verwandte Themen