使用嵌套自定义对象进行NSCoding?

Blu*_*ear 11 iphone objective-c nscoding ios

我有一系列嵌套对象,我需要通过NSCoding协议,以便我可以将顶级对象保存到NSUserDefaults.

这是对象的结构:

'讲师'课

  • 保存...的实例的NSMutableArray

'班级'班级

  • 保存...的实例的NSMutableArray

'学生'课

  • 名称属性
  • 号码属性
  • 金钱财产

我需要将一个Instructor实例保存到NSUserDefaults或该应用程序的文档.正如您所看到的,Instructor对象持有一个数组,然后该数组将保存一个类的实例.该类对象持有学生的实例.

NSCoding协议是递归的吗?我的意思是,如果我将NSCoding协议添加到每个类,我可以保存一个Instructor对象,它会递归编码包含的对象?

在解码时它会以相同的方式工作吗?我可以解码一个教师类,它会递归解码所包含的对象,因为它们也符合NSCoding协议?

我该如何设置呢?

Dun*_*n C 17

是的,您可以(并且可能应该)将您对NSCoding的支持写为递归.这就是NSCoding应该如何工作的方式.

当您的工具encodeWithCoder时,只需调用

[coder encodeObject: aProperty forKey: @"propertyName"];
Run Code Online (Sandbox Code Playgroud)

在所有对象的属性上,包括它的容器属性.

然后确保对象的对象图中的每个对象也符合NSCoding.

对于标量属性,可以使用NSCoder方法保存标量值,例如encodeInt:forKey:

要将符合NSCoding的对象保存为用户默认值,首先使用NSKeyedArchiver类方法archivedDataWithRootObject将其转换为NSData,然后将结果数据保存为默认值.很简单,真的.