我試着去NSCoding協議添加到我的自定義類:斯威夫特:想實現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
在控制檯中的錯誤是:
fatal error: unexpectedly found nil while unwrapping an Optional value
而且在Xcode的錯誤是:
Thread 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到底是零,而不是UIImage的(命名爲: 「NoPic.png」)
你的代碼是很興奮的與所有那些感嘆號所有的地方! – nhgrif