Question

Actuellement, j'apprends toutes les choses autour du codage des valeurs clés.

Dans les documents, ils disent:

Tout objet dans la séquence de chemin de clé qui n'est pas conforme au codage de la valeur clé pour la clé appropriée reçoit une valeurForUnDefinedKey: Message.

J'essaie d'imaginer une situation où un objet n'est pas conforme au codage de valeur clé. Comment cela pourrait-il arriver? Quand je sous-classe un uiView, c'est évidemment conforme, non? Mais quand je fais juste mon propre objet avec NSObject comme Superclass, comment ça? Et quand je fais un cours sans superclasse, alors c'est sûr que ce n'est pas conforme à KV?

Était-ce utile?

La solution

Si vous lisez attentivement, vous le verrez indique "le codage des clés est conforme Pour la clé appropriée". Cela signifie, fondamentalement, que vous n'avez pas les méthodes KVC appropriées pour la clé que vous avez demandée. Donc, si je le fais [[NSString stringWithString:@"foo"] valueForKey:@"dippingSauce"], il tombera à valueForUndefinedKey: Parce que NSString n'est pas conforme à KVC pour la clé "Dippingsauce" - il n'a pas de dippingSauce Méthode d'instance ou un dippingSauce ivar.

Autres conseils

Il dit "ce n'est pas conforme au codage de valeur clé Pour la clé appropriée. "Ce que cela signifie, c'est 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

Est conforme pour "foo" et "bar", mais pas "baz".

Pour des propriétés simples qui sont tout ce qu'il y a, par défaut, toutes les sous-classes NSObject implémentent KVC de base. Cela devient plus délicat avec les collections. Pour que KVC fonctionne correctement pour les collections (afin que vous puissiez faire des choses comme:

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

Cela nécessite de mettre en œuvre certaines méthodes supplémentaires. En général, le plus grand utilisateur de cette fonctionnalité est les liaisons de cacao (qui ne sont pas disponibles sur l'iPhone) provenant de coredata (qui génère automatiquement ces méthodes de collecte supplémentaires), de sorte qu'elle est généralement gérée automatiquement. Généralement, les gens ne prennent pas la peine de mettre en œuvre le soutien complet de la KVC pour les dictionnaires ou les tableaux dans leurs objets, sauf s'ils ont l'intention de les exposer. Tu peux lis sur la conformité dans le guide KVC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top