我正在尝试对自定义类进行编码,因此我可以使用NSKeyedArchiver.archivedDataWithRootObject
保存它
但是当我尝试遵循NSCoding协议时,我收到了这个错误:' self'在self.init之前使用。这是我的代码:
class MemberRewardsInfo: NSObject, NSCoding {
var id: Int?
required convenience init?(coder aDecoder: NSCoder) {
guard let unarchivedId = aDecoder.decodeObjectForKey("id") as? Int
else {
return nil
}
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(id, forKey: "id")
}
}
它很烦人,不知道为什么它不起作用。
答案 0 :(得分:0)
显然对convenience
感到不安。假设是如果你创建了一个便利初始化器,那么它将链接到一个真实的初始化器。
答案 1 :(得分:0)
使用便捷初始化程序时,只需调用指定的初始值设定项(在您的情况下为self.init(),在块内)。有关解释,请参阅Apple文档中的this example。
required convenience init?(coder aDecoder: NSCoder) {
guard let unarchivedId = aDecoder.decodeObjectForKey("id") as? Int
else {
return nil
}
self.init()
self.id = unarchivedId
}