我有祖父母、父母和孩子的模型关系(类模型对象,它包含许多Orchestras,每个包含许多Sections)。换句话说,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()

    }

NSCodingPlayer方法中,我将调用:
if let archivedItems = NSKeyedUnarchiver.unarchiveObject(withFile: itemArchivalURL.path) as? [Item] {
            allPlayers = archivedItems
        }

最佳答案

如果要存档NSCoding的实例,所有3个实例都必须符合Orchestra
如果您只想归档一个Section实例,而该实例只SectionPlayer必须符合NSCoding
这样想吧。您希望存档的任何对象本身都必须符合NSCoding。任何需要在该类中编码/解码的内容也必须符合NSCoding。对于最终需要编码/解码的所有类,这需要始终保持为true。

关于ios - 在祖 parent - parent -子女数据模型关系中适当使用NSCoding,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43175679/

10-09 09:14