0

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

任何可能的解决方案?

谢谢!!

4

1 回答 1

5

在头文件中表明你的类将实现NSCoding协议,比如<NSCoding>

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

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

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

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

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

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

array1 = [[coder decodeObjectForKey:@"array1"] retain];
于 2010-09-04T23:03:51.100 回答