NSString не может декодировать версию класса XXXX
Я реализую свой собственный ключ 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
NSCoder
в NSString
"s initWithCoder:
тогда мы получаем ту же ошибку, что и выше, но номер версии равен 0.
Я подозреваю, что это может быть связано с тем, что я понятия не имею, что я должен реализовывать в versionForClassName:
метод. Даже из архива и сериализации: ссылка на подклассы NSCoder. Я не могу многое почерпнуть из этого.
1 ответ
Аааа.... в процессе написания вопроса я понял, что не реализовал allowsKeyedCoding
метод, который, кажется, по крайней мере смягчил проблему.
Тем не менее, я все еще не уверен, что должно быть реализовано в versionForClassName:
если что-нибудь. Я просто удалил его из своих реализаций, и все, кажется, работает так же хорошо.
Надеюсь, это кому-нибудь поможет.