在祖父母 - 父子数据模型关系中适当地使用NSCoding

时间:2017-04-03 02:26:37

标签: ios swift nscoding

我有祖父母,父和子模型关系(Orchestra类模型对象,其中包含许多Section,每个包含许多Player s)。换句话说,Orchestra对象具有名为var allSections: [Section]的属性,而Section对象具有名为var allPlayers: [Player]的属性

我的目标是使用NSCoding保留所有三个模型的数据。 我很困惑我是否应该遵守NSCoding (A)所有3个类,(B)只有子类,或者(C)除了子类之外的所有类?我混淆的一个原因是[NSCoding是重生的] [1]。

到目前为止,我已为NSCoding

实施了标准Player协议方法
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()

    }

init的{​​{1}}方法中,我会致电:

Section

1 个答案:

答案 0 :(得分:1)

如果您希望归档NSCoding的实例,则所有3必须符合Orchestra

如果您只想归档只有SectionSection必须符合Player的{​​{1}}个实例。

这样想。您要归档的任何对象必须符合NSCoding。在该类中编码/解码所需的任何内容也必须符合NSCoding。对于最终需要编码/解码的所有类,这需要保持一致。