1

我已经用谷歌搜索并搜索了这个,但没有直接的结果。看来我对 Apple 文档中的以下内容存在根本性的误解:

存档可以存储任意复杂的对象图。存档保留了图中每个对象的身份以及它与图中所有其他对象的所有关系。未归档时,重建的对象图应该是原始对象图的精确副本,除了少数例外。

假设我有一个对象NSMutableArray集合Person。每个Person对象都实现initWithCoderencodeWithCoder。此外,任何给定的对象Person都可能具有 的一个NSMutableArray(类似地兼容编码)Task

我的理解是有一种归档方式,从而触发任意深度的级联序列化,具体取决于编码协议的实现。所以在我的视图控制器中,我有一个willEnterBackground

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

我有一个viewDidLoad这样做的:

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

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

  1. 数组包含的对象中的initWithCoderand永远不会被调用。encodeWithCoderpeople
  2. 不出所料,结果是self.people一个大小为 0 的 NSMutableArray。令人惊讶的是,未归档的数据有 252 个字节长,看起来差不多。

建议?提示?

4

1 回答 1

2

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

于 2012-07-31T18:52:41.727 回答