Domanda

Attualmente sto imparando tutte le cose sulla codifica dei valore chiave.

Nei documenti dicono:

Qualsiasi oggetto nella sequenza del percorso chiave che non è conforme alla codifica del valore chiave per il tasto appropriato riceve un messaggio di ValueForundefinedKey:.

Cerco di immaginare una situazione in cui un oggetto non è conforme alla codifica del valore chiave. Come potrebbe accadere? Quando sottoclassi un Uiview, è ovviamente conforme, giusto? Ma quando faccio solo il mio oggetto con NSObject come superclasse, come va? E quando faccio una lezione senza superclasse, allora sicuramente questo non è conforme a KV?

È stato utile?

Soluzione

Se leggi attentamente, vedrai che dice "conforme alla codifica del valore chiave Per la chiave appropriata"Questo significa, in sostanza, che non hai i metodi KVC appropriati per la chiave che hai chiesto. Quindi se lo faccio [[NSString stringWithString:@"foo"] valueForKey:@"dippingSauce"], cadrà a valueForUndefinedKey: Perché NSString non è conforme a KVC per la chiave "DIPPINGAUCE"-non ha un dippingSauce metodo di istanza o a dippingSauce Ivar.

Altri suggerimenti

Dice "Non è conforme alla codifica del valore chiave Per la chiave appropriata. "Ciò significa che è quello

@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

È conforme a "foo" e "bar", ma non a "baz".

Per proprietà semplici che è tutto ciò che c'è ad esso, per impostazione predefinita tutte le sottoclassi NSObject implementano KVC di base. Diventa più complicato con le collezioni. Affinché KVC funzioni correttamente per le raccolte (così puoi fare cose come:

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

Richiede di implementare determinati metodi extra. In generale, il più grande utente di quella funzionalità sono i binding di cacao (che non è disponibile su iPhone) provenienti da Coredata (che genera comunque automaticamente quei metodi di raccolta aggiuntivi), quindi di solito è ancora gestito sostanzialmente automaticamente. Generalmente le persone non si preoccupano di implementare il supporto KVC completo per dizionari o array nei loro oggetti a meno che non intendano esporli effettivamente. Puoi leggere Informazioni sulla conformità nella guida KVC.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top