如何用NSKeyedArchiver保存我自己的对象?

时间:2010-09-04 20:36:38

标签: iphone objective-c arrays save nskeyedarchiver

我使用NSKeyedArchiver / NSKeyedUnarchiver来保存我的对象时遇到问题。
我添加了方法- (id)initWithCoder:(NSCoder *)decoder- (void)encodeWithCoder:(NSCoder *)encoder。问题是,当我尝试保存对象时,它无法正常工作 我可以想象一个问题(但我不确定这是不是问题;))。我的对象中有一些数组。它们包含更多的对象(我也实现了两个“Coder”-Methods)。那么数组是否调用了它的对象中的方法?

任何可能的解决方案??

谢谢!

1 个答案:

答案 0 :(得分:5)

在标头文件中表明您的课程将实施NSCoding协议,例如<NSCoding>

encodeWithCoder方法中,您需要对要保存的所有字段进行编码,如下所示:

[encoder encodeObject:array1 forKey:@"array1"];

然后在initWithCoder方法中,解码已编码的字段:

array1 = [coder decodeObjectForKey:@"array1"];

确保任何编码容器仅包含也实现NSCoding协议的对象。这可以是核心类,例如NSStringNSNumberNSArrayNSDictionary,以及您自己的自定义对象。

如果您的项目没有使用垃圾收集,您需要保留或复制从存档中检索的数据,如下所示:

array1 = [[coder decodeObjectForKey:@"array1"] retain];