Почему я получаю «не поддерживает архивирование» в моем подклассе Nswindow?
-
20-09-2019 - |
Вопрос
У меня есть следующий класс:
@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)
... НЕТ просто "Conforms to NSCoding"
- Так я думаю, что это означает, что только биты NSResponder соответствуют NSCODING?
Решение
Прямо из документации Nswindow:
Примечание: Хотя класс Nswindow наследует протокол NSCODING от NSResponder, класс не поддерживает кодирование. Установившая поддержку архиверов существует, но ее использование устарело и может не работать. Любая попытка архивировать или Unarchive объект Nswindow с использованием ключевого объекта кодирования повышает исключение nsinvalidargumentException.
Другие советы
Ваш класс реализует весь Протокол или просто Encodewithcoder? Методы, отмеченные «требуемыми», не являются обязательными.
Хорошо, похоже, что я жертва своего вмешательства с MVC -Model - NSView & Nswindow не делайте вещи NSCODING.