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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top