2010-10-08 151 views
3

我想归档(NSCoding)协议添加到我的模型类,然后我实现了这两种方法encodeWithCoder:(NSCoder*)coderinitWithCoder:(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)。我想念这件事吗?

谢谢。 赫宾

回答

7

尝试使用的NSKeyedArchiver代替NSArchiver。

+1

没错,因为你使用了键控编码/解码方法。 – 2010-10-08 17:06:39

+0

啊,这么简单,谢谢 – Hebbian 2010-10-08 17:24:18

+0

@Hebbian - 这个答案解决了我的问题。你需要把它标记为正确的那个 – 2011-12-21 21:30:18