2010-09-04 36 views
0

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

任何可能的解决方案?

谢谢!

+0

你确定你正在尝试存档的对象是存档?我没有名单,但主要是原始的。 NSString,NSNumber,NSValue等等。 – 2010-09-04 21:27:38

+0

您是否使用'encodeObject:forKey:'在密钥存档中进行编码? – asandroq 2010-09-04 21:30:37

回答

5

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

encodeWithCoder方法,你需要编码所有要保存像这样的字段:

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

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

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

是su所有编码的容器只包含也实现协议的对象。这可以是核心类,例如NSString,NSNumber,NSArray,NSDictionary,以及您自己的自定义对象。

如果你的项目没有使用,你需要保留或复制档案检索,像这样的数据垃圾收集:

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

非常感谢! – 2010-09-05 09:25:04

+0

那么......现在我有下一个问题:当我有一个由我自己的其他对象继承的对象时,我该如何行动。一个工作得很好,但只要我继承它不起作用 – 2010-09-06 14:59:56

+0

- (id)initWithCoder:(NSCoder *)coder {if(self = [super initWithCoder:coder]){ – 2010-09-07 01:43:00

相关问题