0

我正在实现自己的键控NSCoder子类,并且 NSString 的解码失败。

如果我执行以下操作:

MyUnarchiver *aDecoder = [[MyUnarchiver alloc] initWithData:someArchivedData];
NSString *aString = [[NSString alloc] initWithCoder:aDecoder];

然后抛出以下“未捕获的异常”:

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'NSString cannot decode class version 12345'

我认为12345 来自此方法的位置MyUnarchiver

-(NSInteger)versionForClassName:(NSString *)className
{
    return 12345;
}

同样,如果我们抛出一个nil NSCoderat NSStringinitWithCoder:那么我们会得到与上面相同的错误,但版本号是 0。

我怀疑这可能与我不知道我应该在该versionForClassName:方法中实现什么这一事实有关。即使从档案和序列化:子类化 NSCoder参考资料中我也无法收集到太多信息。

4

1 回答 1

0

Aaaand....在写出问题的过程中,我意识到我没有实现该allowsKeyedCoding方法,这似乎至少缓解了这个问题。

但是,我仍然不确定应该实施versionForClassName:什么。我刚刚从我的实现中删除了它,一切似乎都正常工作。

希望这可以帮助某人。

于 2012-10-31T12:37:34.247 回答