致命错误:在快速 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

Swift 错误致命错误:在展开可选值时意外发现 nil

致命错误:在展开可选值时意外发现 nil - 为啥?

swift 2 致命错误:在展开可选值时意外发现 nil - 类别名称

CollectionView 致命错误:在展开可选值时意外发现 nil