我有一個祖父母,父母和孩子的模型關係(Orchestra
類模型對象,它包含許多Section
,每個包含許多Player
)。換句話說,該Orchestra
對象有屬性叫var allSections: [Section]
和Section
對象有一個名爲var allPlayers: [Player]
在祖父母 - 父 - 子數據模型關係中適當使用NSCoding
我的目標是持續數據使用NSCoding
所有三種型號財產。 我很困惑我是否應該符合NSCoding
的(A)所有3個班,(B)只有孩子班,或(C)除了孩子班以外的所有班級?我混亂的一個原因是事實[NSCoding
是recrusive] [1]。
到目前爲止,我已經實現了Player
標準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()
}
而且在Section
的init
方法我稱之爲:
if let archivedItems = NSKeyedUnarchiver.unarchiveObject(withFile: itemArchivalURL.path) as? [Item] {
allPlayers = archivedItems
}
這是有幫助的解釋。我遇到了一個問題,雖然'allSections'確實填充,但屬性'allPlayers'(屬於'Section')不會被保存填充。我用代碼向問題主體添加了更多內容來解釋問題。 – daspianist
您的原始問題已回答。我建議你關閉這個原始問題,然後在新問題上發佈一個新問題。包含所有相關的代碼,並清楚地解釋您在編碼/解碼時遇到的問題。 – rmaddy
明白了。將根據您的建議解包。 – daspianist