NSCoding:找到nil展开可选值

时间:2016-10-13 15:18:27

标签: swift nscoding

自从更新到Swift 3后,我得到了这个我自己无法解决的崩溃......:

  

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

在线

self.isDefault = aDecoder.decodeObject(forKey: "BoxUserDefault_isDefault") as! Bool

为什么现在会崩溃?

这是我的班级

class BoxUserDefault: NSObject, NSCoding {

    var frendlyName: String
    var hostname: String
    var isDefault: Bool

    init(frendlyName: String, hostname: String, isDefault: Bool) {
        self.frendlyName = frendlyName
        self.hostname = hostname
        self.isDefault = isDefault
        super.init()
    }

    func encode(with aCoder: NSCoder) {
        aCoder.encode(self.frendlyName, forKey: "BoxUserDefault_frendlyName")
        aCoder.encode(self.hostname, forKey: "BoxUserDefault_hostname")
        aCoder.encode(self.isDefault, forKey: "BoxUserDefault_isDefault")
    }

    required init?(coder aDecoder: NSCoder) {
        self.frendlyName = aDecoder.decodeObject(forKey: "BoxUserDefault_frendlyName") as! String
        self.hostname = aDecoder.decodeObject(forKey: "BoxUserDefault_hostname") as! String
        self.isDefault = aDecoder.decodeObject(forKey: "BoxUserDefault_isDefault") as! Bool

        super.init()
    }
}

有什么想法吗?谢谢你们

1 个答案:

答案 0 :(得分:8)

使用适当的方法decodeBool(forKey:

self.isDefault = aDecoder.decodeBool(forKey: "BoxUserDefault_isDefault")!