我有以下课程:
@interface SpWindow : NSWindow <NSCoding> {
BOOL _editMode;
SpBgView *bgView;
} ...
...然后我将其称为存档。我的编码方法如下:
- (void) encodeWithCoder:(NSCoder *)aCoder {
NSLog(@"encodeWithCoder CALLED FOR SpWindow");
[super encodeWithCoder:aCoder];
NSLog(@"SpWindow's encodeWithCoder got past the super call");
[aCoder encodeObject:bgView forKey:@"bgView"];
[aCoder encodeBool:_editMode forKey:@"_editMode"];
}
...但[super encodeWithCoder:aCoder];
位导致控制台日志中出现以下内容:
encodeWithCoder CALLED FOR SpWindow
<SpWindow: 0x20009f660> does not support archiving
*** -[NSKeyedArchiver finalize]: warning: NSKeyedArchiver finalized without having had -finishEncoding called on it.
...根据NSWindow文档,该类符合NSCoding协议,所以我不知道为什么我会看到这个问题。
有什么想法吗?
---编辑: NSWindow的课程参考显示:
Conforms to NSCoding (NSResponder)
... NOT 只是"Conforms to NSCoding"
- 所以我猜这是否意味着只有NSResponder位符合NSCoding?
答案 0 :(得分:4)
直接来自NSWindow文件:
注意:虽然NSWindow类继承了NSResponder的NSCoding协议,但该类不支持编码。存在对归档程序的遗留支持,但其使用已弃用,可能无效。任何使用键控编码对象归档或取消归档NSWindow对象的尝试都会引发NSInvalidArgumentException异常。
答案 1 :(得分:1)
您的类是否实现整个协议或仅编码加入?标记为“必需”的方法不是可选的。
答案 2 :(得分:-1)