0

我正在实现我自己的密钥NSCoder的子类和解码失败的NSString。NSString不能解码类的版本XXXX

如果我这样做了以下内容:

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; 
} 

同样,如果我们抛出nilNSCoderNSStringinitWithCoder:然后我们得到了同样的错误如上,但版本号为0

我怀疑这可能与事实,我不知道我应该在versionForClassName:方法来实现做。即使从Archives and Serializations: Subclassing NSCoder参考我无法收集这一点。

回答

0

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

但是,我仍然不确定在versionForClassName:中应该实施什么。我刚刚从我的实现中删除它,并且一切似乎也一样。

希望这可以帮助别人。