我有祖父母、父母和孩子的模型关系(类模型对象,它包含许多Orchestra
s,每个包含许多Section
s)。换句话说,Player
对象具有名为Orchestra
的属性,var allSections: [Section]
对象具有名为Section
的属性
我的目标是使用var allPlayers: [Player]
持久化所有三个模型的数据。对于(A)所有3个类,(B)只有子类,还是(C)除子类之外的所有类,我感到困惑?我困惑的一个原因是,[NSCoding
是再现的][1]。
到目前为止,我已经实现了NSCoding
的标准NSCoding
协议方法:
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: "playerName")
aCoder.encode(id, forKey: "playerId")
aCoder.encode(playerStatus, forKey: "playerStatus")
aCoder.encode(playerPosition, forKey: "playerPosition")
}
required init(coder aDecoder: NSCoder) {
name = aDecoder.decodeObject(forKey: "playerName") as! String
id = aDecoder.decodeObject(forKey: "playerId") as! String
playerStatus = aDecoder.decodeObject(forKey: "playerStatus") as! PlayerStatus
playerPosition = aDecoder.decodeObject(forKey: "playerPosition") as! PlayerPosition
super.init()
}
在
NSCoding
的Player
方法中,我将调用:if let archivedItems = NSKeyedUnarchiver.unarchiveObject(withFile: itemArchivalURL.path) as? [Item] {
allPlayers = archivedItems
}
最佳答案
如果要存档NSCoding
的实例,所有3个实例都必须符合Orchestra
。
如果您只想归档一个Section
实例,而该实例只Section
和Player
必须符合NSCoding
。
这样想吧。您希望存档的任何对象本身都必须符合NSCoding
。任何需要在该类中编码/解码的内容也必须符合NSCoding
。对于最终需要编码/解码的所有类,这需要始终保持为true。
关于ios - 在祖 parent - parent -子女数据模型关系中适当使用NSCoding,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43175679/