首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCoding协议问题

NSCoding协议问题
EN

Stack Overflow用户
提问于 2010-10-09 00:42:33
回答 1查看 2.3K关注 0票数 4

我想将存档(NSCoding)协议添加到我的模型类中,然后实现encodeWithCoder:(NSCoder*)coderinitWithCoder:(NSCoder*)coder方法。MyModelClass有两个实例变量(NSString和NSImage),所以我使用encodeObject:(id)object forKey:(NSString*)string方法对对象加上特定键的值进行编码。但我一直得到一个错误:

*** -encodeObject:forKey: only defined for abstract class. Define -[NSArchiver encodeObject:forKey:]!

下面是我的NSCoding方法代码:

代码语言:javascript
复制
- (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"];

}

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

代码语言:javascript
复制
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)。我是不是漏掉了什么?

谢谢。赫比安人

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-09 01:03:11

尝试使用NSKeyedArchiver而不是NSArchiver。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3892578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档