我有一系列嵌套对象,我需要将它们通过 NSCoding 协议,以便我可以将顶级对象保存到 NSUserDefaults 中。
这是对象的结构:
“导师”班
‘类’类
“学生”班
我需要将 Instructor 的实例保存到 NSUserDefaults 或应用程序的文档中。正如您所看到的,Instructor 对象保存着一个数组,该数组保存着一个类的实例。该类对象保存着学生的实例。
NSCoding 协议是递归的吗?我的意思是,如果我将 NSCoding 协议添加到每个类中,我就可以保存一个 Instructor 对象,并且它会递归地对所包含的对象进行编码?
那么解码时它会以同样的方式工作吗?我可以只解码一个讲师类,它会递归解码所包含的对象,因为它们也符合 NSCoding 协议?
我该如何进行设置?
是的,您可以(并且可能应该)将 NSCoding 的支持编写为递归。这就是 NSCoding 应该如何工作的。
当你实现encodeWithCoder时,只需调用
[coder encodeObject: aProperty forKey: @"propertyName"];
所有对象的属性,包括它的容器属性。
然后确保对象的对象图中的每个对象也符合 NSCoding。
对于标量属性,您可以使用 NSCoder 方法(例如encodeInt:forKey)保存标量值:
要将符合 NSCoding 的对象保存为用户默认值,请首先使用 NSKeyedArchiver 类方法 archivedDataWithRootObject 将其转换为 NSData,然后将结果数据保存到默认值中。真的很简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)