iOS:存档NSMutableArray

时间:2012-07-31 17:51:18

标签: ios nsmutablearray archiving nscoder

我用谷歌搜索并搜索了这个没有直截了当的结果。我似乎对Apple的文档中存在以下基本的误解:

  

存档可以存储任意复杂的对象图。档案   保留图中所有对象的身份和所有对象   它与图中所有其他对象的关系。什么时候   在没有归档的情况下,重建的对象图应该是少数例外   原始对象图的精确副本。

假设我有NSMutableArrayPerson个对象的集合。每个Person对象都实现initWithCoderencodeWithCoder。此外,任何给定的Person NSMutableArray都可能有TaskwillEnterBackground个对象(符合编码规范)。

我的理解是存在一种归档方式,从而触发任意深度的级联序列化,具体取决于编码协议的实现。所以在我的视图控制器中,我有一个data = [NSKeyedArchiver archivedDataWithRootObject:self.people]; // persist to NSUserDefaults

viewDidLoad

我有一个// read from NSUserDefaults self.people = [NSKeyedUnarchiver unarchiveObjectWithData:data];

initWithCoder

这一切都发生了,但有两件事:

  1. 永远不会调用encodeWithCoder数组包含的对象中的peopleself.people
  2. 不出所料,结果是{{1}}是一个大小为0的NSMutableArray。令人惊讶的是,未归档的数据长度为252字节,看起来是正确的。
  3. 连连呢?提示?

1 个答案:

答案 0 :(得分:2)

即使你实现了这两个方法,你是否声明你的Person类在协议中?