2016-06-21 1 views
0

AlamoFireを使用するエンドポイントにAPI呼び出しを行うことができます。印刷ツールを使用してJSONレスポンスをコンソールに出力してJSON文字列を見ることができますが、この文字列を次の関数に移動することはできません。Alamofireがオプションでアンラッピング中に予期せずnilが見つかりましたが、JSONが表示されます

私はエラーを取得しておいてください。

"fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)" 

私のコードは次のようになります。

func getDataForUser(Username:String, UserToken:String) { 
    print("Getting data for user \(Username)") 
    Alamofire.request(.POST, baseURL+userdataURL, parameters: ["Username": Username, "UserToken": UserToken]).response { (req, res, data, error) -> Void in 
     let jSONResponse: NSDictionary = (try! NSJSONSerialization.JSONObjectWithData(data!,options: NSJSONReadingOptions.MutableContainers)) as! NSDictionary 
     print(jSONResponse) 
     if(jSONResponse["Success"] as! Bool == true) { 
      print("Success! API Request Worked") 
      self.delegate!.didReceiveAPIResults(jSONResponse) 
     } 
    } 
} 

エラーがライン上にある:

self.delegate!.didReceiveAPIResults(jSONResponse) 

コンソールは次のようになります。

jSONResponse NSDictionary 2 key/value pairs 0x78e8d6a0 
[0] (null) "Success" : "1" 
[1] (null) "Response" : 2 key/value pairs 

jSONResponseのデバッグ画面では、ドリルが可能なデータが得られますので、そのデータがないことはわかります。 どこから来ていないのですか?どのように解決しますか?

+0

どのラインがクラッシュしていますか? – brl214

+0

self.delegate!.didReceiveAPIResults(jSONResponse) –

+1

それは単純です:あなたの代理人はnilです。 – Moritz

答えて

0

スウィフトでは、"1"は、の値ではありません。trueです。

jSONResponse["Success"] as! Bool == trueでクラッシュしています。これをjSONResponse["Success"] as! String == "1"に変更することができます。

消費しているAPIのソースを変更できる場合は、おそらくSuccesstrue/false JSONブール値にして、スウィフトコードをそのまま残す方がよいでしょう。

+0

そのコードだけである場合でも、無関係な!:印刷(jSONResponse) self.delegate .didReceiveAPIResults(jSONResponseは)それはまだself.delegateに失敗.didReceiveAPIResults(jSONResponse)あなたの質問を編集するための –

+1

感謝。それは 'delegate'が' nil'であることを指摘していますか? – paulvs

0

私の最初の考えは、JSONハンドラまたはAPIコントローラが間違っていたことでした。 私が渡していなかったのは、View Controllerセットアップの代理変数でした。 EG:

api.delegate = self

ことを指摘し@paulvsとエリック・Dをお願い致します。

関連する問題