2016-02-13 13 views
10

Pracowałem nad tym trochę bez powodzenia Mam funkcję, która idzie do UIButton wyłącznie do wykonywania połączeń alamofire do mojego interfejsu rails, który używa wszystkich JSON.alamofire.error Code = -6006 "JSON nie mógł być serializowany

Używam Swift 2, alamofire 3, 7 & Szyny XCode 4 dla mojego API, które jest stosowane do Heroku

Wciąż dostaję ten błąd, kiedy wystrzelić funkcję:

alamofire .error Code = -6006 "JSON nie może być serializowany. Dane wejściowe były zerowe lub zerowe.

Oto mój kod:

@IBAction func Save(sender: AnyObject) { 

    let postsEndpoint: String = "https://APIURL" 
    let parameters = [ 
     "users": [ 
      "name": "James McHarty", 
      "avatar": "Some binary data", 
      "post": [ 
       "title": "First Test Post", 
       "body": "This is the first test post for the API", 
       "liked": "8", //will make INT later 
       "img": "more binary data" 
      ] 
     ] 
    ] 

    Alamofire.request(.POST, postsEndpoint, parameters: parameters, encoding: .JSON) 
     .responseJSON { response in 
      guard response.result.error == nil else { 
      // got an error in getting the data, need to handle it 
      print(response.result.error!) 
      return 
     } 

    } 

    print("func'd") 

} 
+1

Na podstawie komunikatu o błędzie wygląda na to, że serwer nie odesłał żadnych danych. Czy próbowałeś wykonać tę samą prośbę za pomocą 'curl' lub podobnego narzędzia HTTP? Jakiej struktury JSON się spodziewasz? Dlaczego jesteś pewien, że to problem iOS, a nie Rails? –

+0

To było pomocne dane wejściowe, więc rozwiązałem problem z serwerem i wyszedłem z mniejszym żądaniem (tylko użytkownik), a mój serwer zaakceptował żądanie POST i wyświetla to teraz, gdy wykonuję GET: [{"id": 1, "name": " Don McHart "," avatar ":" niektóre binarne bzdury "," posty ": []}]. To prowadzi mnie do przekonania, że ​​robię coś złego w parametrach. –

+0

Możesz zamknąć to pytanie i otworzyć nowe pytanie Railsów, jeśli treść odpowiedzi nie jest zgodna z oczekiwaniami. –

Odpowiedz

1

To nie jest Alamofire lub swift błąd, odpowiedź zwrócony przez serwer nie jest w formacie JSON. możesz wydrukować dane odpowiedzi i sprawdzić, co jest w tym złego.

wypróbuj ten kod, aby wydrukować dane naszego serwera, aby łatwo zidentyfikować błąd i rozwiązać ten problem.

Alamofire.request("Your url").responseJSON(completionHandler: { (response) in 
    switch response.result { 
    case .success(let value): 
     break 

    case .failure(let error): 
     print("\n\n===========Error===========") 
     print("Error Code: \(error._code)") 
     print("Error Messsage: \(error.localizedDescription)") 
     if let data = response.data, let str = String(data: data, encoding: String.Encoding.utf8){ 
      print("Server Error: " + str) 
     } 
     debugPrint(error as Any) 
     print("===========================\n\n") 
    } 

}) 
3

Odpowiedź zwrócony przez serwer nie jest w formacie JSON. Możesz użyć tego narzędzia, aby najpierw przetestować żądanie.

wydruku z kodem błędu nie jest kod błędu HTTP, z powodu braku rozwiązania JSON