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:Archives and Serializations: Subclassing NSCoder referenceからでも、これについて多くを収集することはできません。

4

1 に答える 1

0

ああ、そして....質問を書いているうちに、私はそのallowsKeyedCoding方法を実装していないことに気づきました。これにより、少なくとも問題は軽減されたようです。

ただし、何かあれば何を実装する必要があるかはまだわかりませんversionForClassName:。実装から削除したところ、すべてがうまく機能しているようです。

これが誰かに役立つことを願っています。

于 2012-10-31T12:37:34.247 に答える