2016-06-21 18 views
0

使用AlamoFire我可以對我的端點進行API調用,它的工作原理和按預期方式連接。使用打印工具,我可以將JSON響應打印到控制檯並查看JSON字符串,但我無法將此字符串移至下一個函數。Alamofire意外地發現零,而解包一個可選,但我可以看到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

那麼很簡單:你的代表是零。 – Moritz

回答

0

在Swift中,"1"並不等於的值爲true

它崩潰在jSONResponse["Success"] as! Bool == true。您可以將其更改爲jSONResponse["Success"] as! String == "1"

如果你能夠修改你正在使用的API的來源,你可能更好的做法是讓Success a true/false JSON布爾值,並保持你的Swift代碼原樣。

+0

它是無關緊要的,即使代碼只是:print(jSONResponse) self.delegate!.didReceiveAPIResults(jSONResponse)它仍然失敗self.delegate!.didReceiveAPIResults(jSONResponse) –

+1

感謝您編輯您的問題。那指向'委託'是'nil'不是嗎? – paulvs

0

我最初的想法是JSON處理程序或API控制器是錯誤的。 我沒有通過的是視圖控制器設置中的委託變量。 EG:

api.delegate = self

謝謝@paulvs和Eric d指出了這一點。

相關問題