【问题标题】:NSCoding protocol questionNSCoding 协议问题
【发布时间】:2010-10-08 16:42:32
【问题描述】:

我想将归档 (NSCoding) 协议添加到我的模型类中,然后实现 encodeWithCoder:(NSCoder*)coder 和 initWithCoder:(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"];

}

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

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 forKey:(NSString*)str 更改为encodeObject:(id)obj,错误将停止,但结果是,存档数据不会复制实例变量值(cmiiw)。我错过了什么吗?

谢谢。 赫比

【问题讨论】:

    标签: objective-c cocoa nscoding


    【解决方案1】:

    尝试使用 NSKeyedArchiver 而不是 NSArchiver。

    【讨论】:

    • 对,因为您使用的是键控编码/解码方法。
    • @Hebbian - 这个答案解决了我的问题。您需要将其标记为正确的
    • 保存为 NskeyedArchiever,但仍然崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多