'自'在自定义类上使用NSCoding时,在self.init调用错误之前使用

时间:2016-08-10 19:13:47

标签: ios swift nscoding nscoder

我正在尝试对自定义类进行编码,因此我可以使用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")
  }
}

它很烦人,不知道为什么它不起作用。

2 个答案:

答案 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

}