我想归档(NSCoding)协议添加到我的模型类,然后我实现了这两种方法encodeWithCoder:(NSCoder*)coder
和initWithCoder:(NSCoder*)coder
。 MyModelClass有2个实例变量(NSString和NSImage),所以我使用encodeObject:(id)object forKey:(NSString*)string
方法来编码对象加上特定键的值。但我一直得到了错误:NSCoding协议问题
*** -encodeObject:forKey: only defined for abstract class. Define -[NSArchiver encodeObject:forKey:]!
,这里是我的NSCoding方法的代码:
- (id)initWithCoder:(NSCoder *)coder {
[super init];
mainPath = [[coder decodeObjectForKey:@"mainPath"] retain];
icon = [[coder decodeObjectForKey:@"icon"] retain];
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder {
NSLog(@"encode with coder is called");
[coder encodeObject:mainPath forKey:@"mainPath"];
[coder encodeObject:icon forKey:@"icon"];
}
这也是我怎么称呼他们在我的控制器类:
id object = [assetArray objectAtIndex: [[rows lastObject] intValue]];
if ([object isKindOfClass:[ItemAssetModel class]])
NSLog(@"object is correct");
else
return NO;
NSData *data = [NSArchiver archivedDataWithRootObject: object];
如果我用encodeObject:(id)obj
更改encodeObject:(id)obj forKey:(NSString*)str
,错误停止,但结果是,归档数据不会复制实例变量值(cmiiw)。我想念这件事吗?
谢谢。 赫宾
没错,因为你使用了键控编码/解码方法。 – 2010-10-08 17:06:39
啊,这么简单,谢谢 – Hebbian 2010-10-08 17:24:18
@Hebbian - 这个答案解决了我的问题。你需要把它标记为正确的那个 – 2011-12-21 21:30:18