Alamofire 在展开 Optional 时意外发现 nil,但我可以看到 JSON
Posted
技术标签:
【中文标题】Alamofire 在展开 Optional 时意外发现 nil,但我可以看到 JSON【英文标题】:Alamofire unexpectedly found nil while unwrapping an Optional, yet I can see the JSON 【发布时间】:2016-06-21 14:04:53 【问题描述】:使用 AlamoFire,我可以对我的端点进行 API 调用,它可以正常工作并按预期连接。使用打印工具,我可以将 JSON 响应打印到控制台并查看 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 的调试屏幕为我提供了可以深入研究的数据,因此我知道它不是零。 nil 来自哪里,我该如何解决?
【问题讨论】:
崩溃在哪一行? self.delegate!.didReceiveAPIResults(jSONResponse) 那么很简单:你的代表是零。 那是什么意思?我认为委托是由 jSONResponse 填充的? @EricD 这就是我的想法。什么类符合委托?你能告诉我们这是在哪里发生的吗? 【参考方案1】:在 Swift 中,"1"
不等于 Bool
的值 true
。
它在jSONResponse["Success"] as! Bool == true
崩溃。您可以将其更改为 jSONResponse["Success"] as! String == "1"
。
如果您能够修改正在使用的 API 的源代码,您最好将 Success
设为 true/false
JSON 布尔值,并保持 Swift 代码不变。
【讨论】:
它无关紧要,即使代码只是: print(jSONResponse) self.delegate!.didReceiveAPIResults(jSONResponse) 它仍然在 self.delegate!.didReceiveAPIResults(jSONResponse) 上失败 感谢您编辑您的问题。这表明delegate
是nil
不是吗?【参考方案2】:
我最初的想法是 JSON 处理程序或 API 控制器是错误的。 我没有通过的是视图控制器设置中的委托变量。 例如:
api.delegate = self
感谢@paulvs 和 Eric D 指出这一点。
【讨论】:
以上是关于Alamofire 在展开 Optional 时意外发现 nil,但我可以看到 JSON的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 打印“可选(数据)”,我怎样才能摆脱“可选”
Alamofire.AFError.responseValidationFailed
在 Swift 中播放音乐:在展开 Optional 值时意外发现 nil