编码&使用递归指针解码自定义Swift对象

时间:2018-01-08 08:12:35

标签: ios swift encoding nscoder state-restoration

我试图在swift中编码和解码自定义对象数组。对象看起来像这样:

class MyObject : NSCoding {
  var name: String
  var otherObjects: [MyObject]

  init?(name: String) {
    self.name = name
    self.otherObjects = []
  }

  func encode(with aCoder: NSCoder) {
    aCoder.encode(name, forKey: "name")
    aCoder.encode(otherObjects, forKey: "others")
  }

  required convenience public init?(coder aDecoder: NSCoder) {
    let name = aDecoder.decodeObject(forKey: "name") as! String
    let others = aDecoder.decodeObject(forKey: "others") as! [MyObject]

    self.init(name: name)
    self.otherObjects = others
  }
}

如果MyObject A在其数组中包含MyObject B,则B在其数组中也将包含A.问题是,如上所述,这在启动期间失败,无法执行此递归解码。单步调试,看起来像是

  1. 该应用尝试解码A
  2. 在解码A时,它必须解码包含B的A others数组
  3. 应用程序现在必须解码B.通过这样做,它会看到A在B' others数组中。
  4. 该应用程序开始解码A(由B&#39的编码表示指向的A),并在尝试时失败。
  5. 似乎用这种方法我没有保留原始状态(即在解码之后,A和B不是彼此指向彼此的副本而是指向彼此的副本)。使用NSCoder对我的数据结构进行编码和解码的推荐方法是什么?

0 个答案:

没有答案