我使用NSKeyedArchiver / NSKeyedUnarchiver来保存我的对象时遇到问题。
我添加了方法- (id)initWithCoder:(NSCoder *)decoder
和- (void)encodeWithCoder:(NSCoder *)encoder
。问题是,当我尝试保存对象时,它无法正常工作
我可以想象一个问题(但我不确定这是不是问题;))。我的对象中有一些数组。它们包含更多的对象(我也实现了两个“Coder”-Methods)。那么数组是否调用了它的对象中的方法?
任何可能的解决方案??
谢谢!
答案 0 :(得分:5)
在标头文件中表明您的课程将实施NSCoding
协议,例如<NSCoding>
在encodeWithCoder
方法中,您需要对要保存的所有字段进行编码,如下所示:
[encoder encodeObject:array1 forKey:@"array1"];
然后在initWithCoder
方法中,解码已编码的字段:
array1 = [coder decodeObjectForKey:@"array1"];
确保任何编码容器仅包含也实现NSCoding
协议的对象。这可以是核心类,例如NSString
,NSNumber
,NSArray
,NSDictionary
,以及您自己的自定义对象。
如果您的项目没有使用垃圾收集,您需要保留或复制从存档中检索的数据,如下所示:
array1 = [[coder decodeObjectForKey:@"array1"] retain];