【发布时间】:2015-11-21 19:20:53
【问题描述】:
我正在尝试将 NSCoding 协议添加到我的自定义类中:
class Convo: NSObject, NSCoding {
var name: String
var pic: UIImage
override init() {
self.name = "Dror"
self.pic = UIImage (named: "NoPic.png")!
super.init()
}
required init(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObjectForKey("name") as! String
self.pic = aDecoder.decodeObjectForKey("pic") as! UIImage
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.name, forKey: "name")
aCoder.encodeObject(self.pic, forKey: "pic")
}
}
但它在该行弹出一个错误:
self.pic = aDecoder.decodeObjectForKey("pic") as! UIImage
控制台中的错误是:
致命错误:在展开可选值时意外发现 nil
而xcode中的错误是:
线程 1:EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0)
我不知道该怎么办。
编辑: 运行此代码时:
class Convo: NSObject, NSCoding {
var name: String
var pic: UIImage!
override init() {
self.name = "Dror"
self.pic = UIImage (named: "NoPic.png")!
super.init()
}
required init(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObjectForKey("name") as! String
self.pic = aDecoder.decodeObjectForKey("pic") as? UIImage
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.name, forKey: "name")
aCoder.encodeObject(self.pic, forKey: "pic")
}
}
编译没问题,但是self.pic最后是nil而不是UIImage(命名为:“NoPic.png”)
【问题讨论】:
-
你的代码非常令人兴奋,到处都是感叹号!