'self' used before self.init call error while using NSCoding on a custom class
'self' used before self.init call error while using NSCoding on a custom class
我正在尝试对自定义 class 进行编码,以便我可以使用 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")
}
}
这很烦人,不知道为什么它不起作用。
错误消息有点误导,但您需要将 init(coder:)
设为指定的初始值设定项。
您需要将 init(code:)
修改为如下内容:
required init?(coder aDecoder: NSCoder) {
guard let unarchivedId = aDecoder.decodeObjectForKey("id") as? Int else {
return nil
}
self.id = unarchivedId
super.init()
}
显然它对 convenience
感到不安。假设是,如果你创建一个便利初始化器,它将链接到一个“真正的初始化器。
使用便利初始化器时,只需在块内调用指定的初始化器,在您的情况下为 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
}
我正在尝试对自定义 class 进行编码,以便我可以使用 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")
}
}
这很烦人,不知道为什么它不起作用。
错误消息有点误导,但您需要将 init(coder:)
设为指定的初始值设定项。
您需要将 init(code:)
修改为如下内容:
required init?(coder aDecoder: NSCoder) {
guard let unarchivedId = aDecoder.decodeObjectForKey("id") as? Int else {
return nil
}
self.id = unarchivedId
super.init()
}
显然它对 convenience
感到不安。假设是,如果你创建一个便利初始化器,它将链接到一个“真正的初始化器。
使用便利初始化器时,只需在块内调用指定的初始化器,在您的情况下为 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
}