2016-02-26 14 views
8

Xcode 7.2.1でFBSDKを使用してユーザープロファイル情報を取得し、SwiftyJsonを使用してjsonデータを処理して操作します。値を変更した後/いくつかを削除すると、JSONデータを使って私のAPIに投稿要求を出したいと思う。しかし、私は本当に悪いタイプの問題に迅速にこだわっています。Alamorafire + SwiftyJson + FacebookSDK

これは、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 
} 

は、残念ながら、私はこのエラーが表示されます。

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

私はAPIに直接JSONデータを送信しようとした場合、私はこのエラーが表示されます。

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

助けてください。私はちょうど、String AnyObjectにJSONオブジェクトを変換する方法を知りたいですか?失敗せずに。またはSwift 2でJsonオブジェクトをポスト/プット/パッチリクエストデータとして送信する。

+0

することにより、オプションの辞書には問題ありません.URLから.JSON –

+0

へのエンコードを変更してみてください。うまくいきません.. – artuc

+0

userProfileのデータを共有できますか? –

答えて

1

JSONSwiftyJsonで定義されたカスタムタイプです。あなたのケースではuserProfile.dictionaryObjectを使って素早くDictionaryを取得してみてください。


アンラップこの

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

答えをありがとうが、私はそれを行うときに私は有効なJSONを得ることができないので、それはAPIからエラーをスローする。これは前/後の出力です:http://pastebin.com/i1JqgFec – artuc

+0

@artucデフォルトでは、 'userProfile.dictionaryObject'はオプションの' Dictionary'を返します。あなたはそれをアンラップしなければならないでしょう。 –

+0

残念ながら、help @ J.Wangに感謝します。私がそうすると、無効なJSONが返されます。 dictionaryObjectの前にはすべてがうまくいっていますが、alamofireを使ってJSON型を送信することはできません(他のライブラリがあれば私もOKですが)、これでJSONが正しく返されません私に。 – artuc