2012-07-31 52 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类声明为协议?