Использование NSCoding надлежащим образом в отношениях модели данных дедушка-родитель-ребенок

У меня есть дедушка, родитель и дочерние модели отношений (Orchestra объект модели класса, который содержит много Section с, и каждый содержит много Player с). Другими словами, 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 метод для Section Я позвоню:

if let archivedItems = NSKeyedUnarchiver.unarchiveObject(withFile: itemArchivalURL.path) as? [Item] {
            allPlayers = archivedItems
        }

1 ответ

Решение

Все 3 должны соответствовать NSCoding если вы хотите заархивировать экземпляр Orchestra,

Если вы хотите только заархивировать Section экземпляр, который только Section а также Player должен соответствовать NSCoding,

Подумай об этом так. Любой объект, который вы хотите архивировать, должен сам соответствовать NSCoding, И все, что вам нужно для кодирования / декодирования в этом классе, также должно соответствовать NSCoding, И это должно быть истинным для всех классов, которые в конечном итоге должны быть закодированы / декодированы.

Другие вопросы по тегам