NSCoding:如何在继承的类中创建所需的init

时间:2016-03-08 11:19:37

标签: ios swift nscoding nskeyedarchiver

我和vince(NSCoding required initializer in inherited classes in Swift

有同样的问题

我是一个班级'来源'和一个子类' RSSSource'。这些类符合NSObjectNSCoding,我希望能够与NSKeyedArchiver保持一致。

我不知道如何在子类中创建所需的便利init?(coder aDecoder: NSCoder)。我想称之为超类的方便init

PS:我知道我应该在他的帖子上发表评论,但我不能。 (声誉太低)

2 个答案:

答案 0 :(得分:1)

这是一个简单的例子:

class Source: NSObject, NSCoding {

  var name: String?

  func encodeWithCoder(aCoder: NSCoder) {
    aCoder.encodeObject(name, forKey: "name")
  }

  required init?(coder aDecoder: NSCoder) {
    name = aDecoder.decodeObjectForKey("name") as? String
  }

}

class RSSSource: Source {

  var rssName: String?

  override func encodeWithCoder(aCoder: NSCoder) {
    aCoder.encodeObject(name, forKey: "rssName")
    super.encodeWithCoder(aCoder)
  }

  required init?(coder aDecoder: NSCoder) {
    rssName = aDecoder.decodeObjectForKey("rssName") as? String
    super.init(coder: aDecoder)
  }

}

答案 1 :(得分:-1)

我试过它,它只是自动添加编码。您不需要自己添加编码,否则您想要更改。

样本编码:

required convenience init?(coder aDecoder: NSCoder)

{

fatalError("init(coder:) has not been implemented")

}