Por que estou recebendo "não suporta arquivamento" na minha subclasse NSWindow?
-
20-09-2019 - |
Pergunta
Eu tenho a seguinte aula:
@interface SpWindow : NSWindow <NSCoding> {
BOOL _editMode;
SpBgView *bgView;
} ...
... em que eu chamo de arquivo. Meu método de codificação é o seguinte:
- (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"];
}
... No entanto, o [super encodeWithCoder:aCoder];
Bit resulta no seguinte no log do console:
encodeWithCoder CALLED FOR SpWindow
<SpWindow: 0x20009f660> does not support archiving
*** -[NSKeyedArchiver finalize]: warning: NSKeyedArchiver finalized without having had -finishEncoding called on it.
... De acordo com a documentação do NSWIDOW, a classe está em conformidade com o protocolo NSCoding, então não tenho idéia do porquê de estar vendo esse problema.
Alguma ideia ?
--- Editar: A referência de classe para NSWIDOW mostra:
Conforms to NSCoding (NSResponder)
... NÃO apenas "Conforms to NSCoding"
- Então eu acho que isso significa que apenas os bits NSResponder estão em conformidade com o NSCoding?
Solução
Diretamente da documentação do NSWIDOW:
Observação: Embora a classe NSWIDOW herde o protocolo NSCODing da NSResponder, a classe não suporta codificação. O suporte herdado para arcenistas existe, mas seu uso está preguiçoso e pode não funcionar. Qualquer tentativa de arquivar ou um objeto NSWIDOW, usando um objeto de codificação com chave, aumenta uma exceção do NSINVALIDARGUMENTEXCECTION.
Outras dicas
Sua classe implementa o inteira protocolo ou apenas codewithcoder? Os métodos marcados "exigidos" não são opcionais.
Ok, parece que sou vítima da minha intromissão com o modelo MVC - NSView e Nswindow não fazem a coisa do NSCoding.