2016-02-26 13 views
8

Uso FBSDK con Xcode 7.2.1 per recuperare le informazioni del profilo utente e utilizzare SwiftyJson per gestire e manipolare i dati di JSON. Dopo aver cambiato i valori/rimuovere alcuni voglio fare una richiesta di posta alla mia API con i dati JSON. Ma sono bloccato con problemi di tipo davvero brutto in fretta.Alamorafire + SwiftyJson + FacebookSDK

Questo è il mio codice per fare una richiesta POST:

let headers = [ 
     "Content-Type": "application/json" 
] 
let userProfile = userProfile as? [String : AnyObject] 
Alamofire.request(.POST, "http://localhost:8888/api/profile", parameters: userProfile, headers: headers, encoding:ParameterEncoding.URL) .response { request, response, data, error in 
     print(userProfile) //This prints nil 
     print(response) //This prints api error for expecting data 
} 

Purtroppo ricevo questo errore:

Cast from 'JSON' to unrelated type '[String : AnyObject]' always fails

se cerco di inviare i dati JSON direttamente al API ricevo questo errore:

Cannot convert value of type 'JSON' to expected argument type '[String : AnyObject]?'

Qualsiasi aiuto è apprezzato. Voglio solo sapere, come convertire oggetti JSON in String AnyObject? senza fallire. Oppure invio di oggetti Json come dati di richiesta post/put/patch con Swift 2.

+0

Provare a cambiare la codifica da .URL a .json –

+0

Non è questo il problema. Non funziona .. – artuc

+0

Nessun problema puoi condividere i dati di userProfile? –

risposta

1

JSON è un tipo personalizzato definito in SwiftyJson. Prova a utilizzare userProfile.dictionaryObject nel tuo caso per ottenere lo swift sottostante Dictionary.


Separa dizionario opzionale da questo

if let userProfile = userProfile.dictionaryObject { 
    Alamofire.request(.POST, "http://localhost:8888/api/profile", parameters: userProfile, headers: headers, encoding:ParameterEncoding.URL) .response { request, response, data, error in 
      print(userProfile) //This prints nil 
      print(response) //This prints api error for expecting data 
    } 
} 
+0

Grazie per la risposta, ma quando lo faccio non riesco a ottenere un json valido in modo che genera errore da API. Questo è l'output prima/dopo: http://pastebin.com/i1JqgFec – artuc

+0

@artuc Yep, perché per impostazione predefinita, 'userProfile.dictionaryObject' restituirà un' dizionario' opzionale. Dovrai scartarlo. –

+0

Grazie per l'aiuto @ J.Wang sfortunatamente, quando lo faccio, restituisce un JSON non valido. Prima di dictionaryObject, tutto sembra ottimo ma non posso mandare il tipo JSON con alamofire (è anche ok per me se ci sono altre librerie dove posso inviarlo), ma con questo, il dictionaryObject restituisce JSON sbagliato, quindi il mio server restituisce un errore per me. – artuc