2016-05-02 11 views
-1

Ich arbeitete an meiner App und es funktioniert gut auf Simulator. Während wir das auf meinem iPhone ausprobiert haben, stürzte es mit dem Unwrapping-Fehler ab. Irgendwelche Ideen? Thx error screenshotAlamofire, schwerwiegender Fehler: unerwartet gefunden Null beim Entpacken ein optionaler Wert

class connection{ 
var url: String = "" 
func connectServer(url:String,completionHandler: (jsonResponse: JSON) ->()) {  
    Alamofire.request(.GET, url) 
     .responseJSON { (response) in 
      let json = JSON(response.result.value!) 
      //  print(json) // works fine 
      completionHandler(jsonResponse: json) 
    } 
} 

}

func loadData(){ 
    let cn = connection() 
    let url = "http://localhost:3000/api/v1/patients/user_id/"+userID 
    // Call function to connect server by API with specific url 
    cn.connectServer(url) { (jsonResponse) in 
     //Parsing JSON file 
     for item in jsonResponse["patients"].arrayValue{ 
      //pasring json 
      } 
      }} 
+1

Der Grund dafür ist, dass '' response.result.value ist 'nil'!. Höchstwahrscheinlich ist 'localhost' nicht auf dem Gerät verfügbar. Ich vermute, dass Alamofire im Fehlerfall auch ein Fehlerobjekt zurückgibt. Überprüfen Sie das immer zuerst! – vadian

+1

Sie sollten immer die Möglichkeit in Erwägung ziehen, dass ein optionales NULL sein könnte, und schreiben Sie daher die Fehlerbehandlungslogik, um diesen Fall korrekt zu behandeln - [siehe dieses Q & A für den sicheren Umgang mit Optionals.] (Http://stackoverflow.com/questions/ 32170456/what-does-fatal-error-unerwartet-found-nil-while-unwrapping-an-optional-valuable) – Hamish

+0

@vadian Sie haben Recht. Danke für Ihre Hilfe. Ich habe versucht, die Fehlermeldung auszudrucken und sagte, dass sie keine Verbindung zum Server herstellen kann. Gibt es eine Lösung, um meine App auf dem iPhone gut arbeiten zu lassen, ich meine noch Daten von localhost zu holen? –

Antwort

0

Versuchen Sie dieses:

var url: String = "" 
    func connectServer(url:String,completionHandler: (jsonResponse: JSON) ->()) { 
     Alamofire.request(.GET, url) 
      .responseJSON { (response) -> Void in 
       guard response.result.isSuccess else { 
        print("Error while fetching remote rooms: \(response.result.error)") 
        completion(nil) 
        return 
       } 

       guard let value = response.result.value as? [String: AnyObject], 
        completionHandler(jsonResponse: value) else { 
         print("Malformed data received from fetchAllRooms service") 
         completion(nil) 
         return 
       } 


     } 
    } 
+0

Was bedeutet Fertigstellung (Null)? Ich habe das versucht, aber gibt mir einen unaufgelösten Bezeichner Fehler –

+0

ersetzen Sie einfach, wenn Wert = response.result.value als? [String: AnyObject] {completionHandler (jsonResponse: value)} mit Ihrem let json = JSON (response.result.value!) –

Verwandte Themen