Pergunta

Atualmente, estou aprendendo tudo sobre a codificação de valor-chave.

Nos documentos que eles dizem:

Qualquer objeto na sequência do caminho principal que não é compatível com codificação de valor-chave para a tecla apropriada recebe um valueForEndeDEnKeyKey: mensagem.

Eu tento imaginar uma situação em que um objeto não é compatível com codificação de valor-chave. Como isso poderia acontecer? Quando eu subclasse um UIView, isso é obviamente compatível, certo? Mas quando eu apenas faço meu próprio objeto com o NSObject como superclasse, como é isso? E quando faço uma aula sem superclasse, com certeza não é compatível com a KV?

Foi útil?

Solução

Se você ler com cuidado, você verá "Compatível com codificação de valor-chave compatível Para a chave apropriada". Isso significa, basicamente, que você não tem os métodos KVC apropriados para a chave que você pediu. [[NSString stringWithString:@"foo"] valueForKey:@"dippingSauce"], vai cair para valueForUndefinedKey: Porque a NSString não é compatível com o KVC para a chave "DippingSauce"-ele não tem um dippingSauce método de instância ou um dippingSauce Ivar.

Outras dicas

Diz "isso não é compatível com codificação-chave compatível Para a chave apropriada. "O que isso significa é que

@interface MyObject : NSObject {
  NSString *foo;
  NSString *bar;
}

@property (nonatomic, retain) NSString *foo;
@property (nonatomic, retain) NSString *bar;

@end

@interface MyObject

@synthesize foo;
@synthesize bar;

@end

É compatível com "Foo" e "Bar", mas não "Baz".

Para propriedades simples que existe, por padrão, todas as subclasses NSOBject implementam o KVC básico. Fica mais complicado com as coleções. Para que o KVC funcione corretamente para coleções (para que você possa fazer coisas como:

NSArray *people = ... ;
NSArray *firstNames = [people valueForKey:@"firstName"];

Requer que você implemente certos métodos extras. Em geral, o maior usuário dessa funcionalidade são as ligações de cacau (que não estão disponíveis no iPhone) provenientes de coredata (que gera métodos adicionais de coleta automaticamente de qualquer maneira), por isso geralmente é manuseado basicamente automaticamente. Geralmente, as pessoas não se preocupam em implementar o suporte completo do KVC para dicionários ou matrizes em seus objetos, a menos que pretendam realmente expô -los. Você pode ler sobre conformidade no guia KVC.

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