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