致命错误:在快速 Json 解析中展开可选值时意外发现 nil
Posted
技术标签:
【中文标题】致命错误:在快速 Json 解析中展开可选值时意外发现 nil【英文标题】:fatal error: unexpectedly found nil while unwrapping an Optional value in swift Json parsing 【发布时间】:2015-11-04 06:15:17 【问题描述】:在我的代码中,我在展开可选值时意外发现 nil,但我不知道如何解决问题,所以请说出我在此代码中犯了什么错误以及如何解决问题,我完全困惑最近几天是因为我是 swift 的新手?
我在这里给出我的代码.....
let dataArr : NSArray = responseObject.valueForKeyPath("response.result") as! NSArray
print(dataArr)
for vartype : AnyObject in dataArr
let titleStr : NSString = vartype.valueForKey("title") as! NSString
let messageStr : NSString = vartype.valueForKey("message") as! NSString
let date_updatedStr : NSString = vartype.valueForKey("date_updated") as! NSString
let postprofilephotoStr : NSString = vartype.valueForKey("postprofilephoto") as! NSString
let imgattachStr : NSString = vartype.valueForKey("attachments.image") as! NSString -----> //From This line I get the issue.
let audioattachStr : NSString = vartype.valueForKey("attachments.audio") as! NSString
let videoattachoStr : NSString = vartype.valueForKey("attachments.video") as! NSString
let ptypeStr : NSString = vartype.valueForKey("ptype") as! NSString
let attachmentStr : NSString = vartype.valueForKey("attachments") as! NSString
self.tableView.reloadData()
print("JSON: " + responseObject.description)
,
failure: (operation: AFHTTPRequestOperation!,
error: NSError!) in
print("Error: " + error.localizedDescription)
)
【问题讨论】:
任何以!
结尾的类型都将在运行时强制解包。如果强制解包变量在解包时包含 nil,您将看到此错误。 Swift 强制你在编译时处理 nil
值。尝试将 !
替换为 ?
并更改您的代码以使其编译。
我想在哪个地方替换? ..@nielsbot
【参考方案1】:
请检查您的对象vartype
。显然,其中不存在关键路径attachments.image
。
当您尝试在不检查 nil
的情况下强制打开一个可选项时,肯定会发生这种崩溃(如果该可选项实际上是 nil
)。
为了避免发生这种崩溃,请使用 if let
语法来解包选项。
编辑:发布 OP cmets - 试试这个:
if let value : AnyObject = vartype.valueForKey("attachments.image")
imgattachStr = value as! NSString
您应该对所有选项强制展开执行此安全检查。
【讨论】:
如果让语法我想在哪个地方使用..@Abhinav 好的,请发布结果! 不应该是valueForKeyPath()
吗?以上是关于致命错误:在快速 Json 解析中展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章
Swift 中的可选类型错误:致命错误:在展开可选值时意外发现 nil
JSON 致命错误:在展开可选值 (llbd) 时意外发现 nil