2012-07-31 84 views
1

我已經谷歌搜索和搜索這沒有直截了當的結果。看起來我對Apple的文檔有以下誤解:iOS:歸檔NSMutableArray

存檔可以存儲任意複雜的對象圖。存檔 保留圖中每個對象的標識以及它與圖中所有其他對象之間的所有關係。當 解除存檔時,除了少數例外,重建的對象圖應該是原始對象圖的精確副本的 。

假設我有一個NSMutableArray,它是Person對象的集合。每個Person對象實現initWithCoderencodeWithCoder。此外,任何給定的Person可能具有Task的對象(類似地,編碼兼容)的NSMutableArray

我的理解是有一種存檔方式,因此觸發了任意深度的級聯序列化,具體取決於編碼協議的實現。所以在我的視圖控制器,我有一個willEnterBackground,做:

data = [NSKeyedArchiver archivedDataWithRootObject:self.people]; 
// persist to NSUserDefaults 

,我有一個viewDidLoad,做:

// read from NSUserDefaults 
self.people = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

這一切發生,但兩件事情:

  1. initWithCoderencodeWithCoderpeople數組中包含的對象永遠不會被調用。
  2. 不出所料,結果是self.people是大小爲0的NSMutableArray。令人驚訝的是,未存檔的數據長度爲252字節,看起來正確。

建議?提示?

回答

2

即使您實現了這兩種方法,您是否將Person類聲明爲協議?