NSCoding协议问题

Heb*_*ian 4 cocoa objective-c nscoding

我想将归档(NSCoding)协议添加到我的模型类,然后我实现这两个方法encodeWithCoder:(NSCoder*)coderinitWithCoder:(NSCoder*)coder.MyModelClass有2个实例变量(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"];

}
Run Code Online (Sandbox Code Playgroud)

这就是我在控制器类中调用它们的方式:

id object = [assetArray objectAtIndex: [[rows lastObject] intValue]];

 if ([object isKindOfClass:[ItemAssetModel class]])
  NSLog(@"object is correct");
 else
  return NO;

 NSData *data = [NSArchiver archivedDataWithRootObject: object];
Run Code Online (Sandbox Code Playgroud)

如果我更改了encodeObject:(id)obj forKey:(NSString*)strwith encodeObject:(id)obj,则错误停止,但结果是,归档数据不会复制实例变量值(cmiiw).我会错过这个吗?

谢谢.赫布

小智 8

尝试使用NSKeyedArchiver而不是NSArchiver.