我想将存档(NSCoding)协议添加到我的模型类中,然后实现encodeWithCoder:(NSCoder*)coder和initWithCoder:(NSCoder*)coder方法。MyModelClass有两个实例变量(NSString和NSImage),所以我使用encodeObject:(id)object forKey:(NSString*)string方法对对象加上特定键的值进行编码。但我一直得到一个错误:
*** -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,错误是stops,但结果是,存档的数据没有复制实例变量值(cmiiw)。我是不是漏掉了什么?
谢谢。赫比安人
发布于 2010-10-09 01:03:11
尝试使用NSKeyedArchiver而不是NSArchiver。
https://stackoverflow.com/questions/3892578
复制相似问题