我试图在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.问题是,如上所述,这在启动期间失败,无法执行此递归解码。单步调试,看起来像是
others
数组others
数组中。似乎用这种方法我没有保留原始状态(即在解码之后,A和B不是彼此指向彼此的副本而是指向彼此的副本)。使用NSCoder对我的数据结构进行编码和解码的推荐方法是什么?