我已经用谷歌搜索并搜索了这个,但没有直接的结果。看来我对 Apple 文档中的以下内容存在根本性的误解:
存档可以存储任意复杂的对象图。存档保留了图中每个对象的身份以及它与图中所有其他对象的所有关系。未归档时,重建的对象图应该是原始对象图的精确副本,除了少数例外。
假设我有一个对象NSMutableArray
集合Person
。每个Person
对象都实现initWithCoder
和encodeWithCoder
。此外,任何给定的对象Person
都可能具有 的一个NSMutableArray
(类似地兼容编码)Task
。
我的理解是有一种归档方式,从而触发任意深度的级联序列化,具体取决于编码协议的实现。所以在我的视图控制器中,我有一个willEnterBackground
:
data = [NSKeyedArchiver archivedDataWithRootObject:self.people];
// persist to NSUserDefaults
我有一个viewDidLoad
这样做的:
// read from NSUserDefaults
self.people = [NSKeyedUnarchiver unarchiveObjectWithData:data];
这一切都会发生,但有两件事:
- 数组包含的对象中的
initWithCoder
and永远不会被调用。encodeWithCoder
people
- 不出所料,结果是
self.people
一个大小为 0 的 NSMutableArray。令人惊讶的是,未归档的数据有 252 个字节长,看起来差不多。
建议?提示?