嵌套自定义对象的NSCoding?
我有一系列的嵌套对象,我需要通过NSCoding协议,以便我可以将顶级对象保存到NSUserDefaults。
这里是对象的结构:
“导师”class
- NSMutableArray持有的实例…
'class'级
- NSMutableArray持有的实例…
'学生'class
- 名称属性
- 数字属性
- 货币财产
我需要将教师的实例保存到NSUserDefaults或应用程序的文档。 正如你所看到的教师对象是持有一个数组,然后举行一个类的实例。 那个类对象持有学生的实例。
NSCoding协议是否recursion? 我的意思是,如果我将NSCoding协议添加到每个类,然后我可以保存一个教师对象,它会recursion编码包含的对象?
那么它会在解码时以相同的方式工作吗? 我可以解码一个教师类,它会recursion解码包含的对象,因为他们也符合NSCoding协议?
我怎么能设置这个呢?
是的,你可以(也可能应该)写你对NSCoding的支持是recursion的。 这就是NSCoding应该如何工作。
当你的工具encodeWithCoder,只需调用
[coder encodeObject: aProperty forKey: @"propertyName"];
包括所有对象的属性,包括容器属性。
然后确保对象的对象图中的每个对象也符合NSCoding。
对于标量属性,可以使用像encodeInt:forKey这样的NSCoder方法保存标量值:
要将符合NSCoding的对象保存为用户默认值,请先使用NSKeyedArchiver类方法archivedDataWithRootObject将其转换为NSData,然后将结果数据保存为默认值。 很简单,真的。
NSCoding
不是神奇的,所以如果你的编码和解码方法的实现告诉它,它将“recursion地”工作。
实现NSCoding
方法,并将要编码的数据传递给编码器。 在所有自定义类中实现NSCoding
方法,以便在对数组进行编码时,可以适当地处理所有内容。
如果类超类也实现了NSCoding
一定要调用super
。
例如
- (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:self.arrayOfClasses forKey:@"arrayOfClasses"]; } - (id)initWithCoder:(NSCoder *)decoder { self.arrayOfClasses = [decoder decodeObjectForKey:@"arrayOfClasses"]; }