2017-04-03 63 views
0

我有一個祖父母,父母和孩子的模型關係(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() 

    } 

而且在Sectioninit方法我稱之爲:

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

回答

1

所有3必須符合NSCoding如果您希望歸檔Orchestra的實例。

如果您只想歸檔一個Section實例,只有SectionPlayer必須符合NSCoding

想想這樣。無論您想歸檔的對象本身必須符合NSCoding。並且您需要在該類中編碼/解碼的任何內容也必須符合NSCoding。對於最終需要編碼/解碼的所有類,這需要一直保持正確。

+0

這是有幫助的解釋。我遇到了一個問題,雖然'allSections'確實填充,但屬性'allPlayers'(屬於'Section')不會被保存填充。我用代碼向問題主體添加了更多內容來解釋問題。 – daspianist

+0

您的原始問題已回答。我建議你關閉這個原始問題,然後在新問題上發佈一個新問題。包含所有相關的代碼,並清楚地解釋您在編碼/解碼時遇到的問題。 – rmaddy

+0

明白了。將根據您的建議解包。 – daspianist