Почему я получаю «не поддерживает архивирование» в моем подклассе Nswindow?

StackOverflow https://stackoverflow.com/questions/1917268

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top