Quelle est la différence entre ForeKey et ForkeyPath dans la méthode SETValue de NSMutAfitionnelle? J'ai regardé tous les deux dans la documentation et ils me semblaient la même chose. J'ai essayé de suivre le code, mais je ne pouvais pas distinguer la différence.
3 Réponses :
Apple Documentation: NskeyValuecoding Protocol Référence
Définit la propriété du récepteur spécifié par une clé donnée sur une valeur donnée. P> Exemple: em> p> SETValue: ForKeyPathe: strong> p> Définit la valeur de la propriété identifiée par un chemin de clé donné à une valeur donnée. p> Exemple: em> p> [foo setValue:@"The quick brown fox" forKeyPath:@"bar.stringOnBar"];
En outre, lorsque vous utilisez "SETVALUE: ForKeyPathe:" Assurez-vous que l'objet au clavier existe. Si c'est nul, la méthode échouera silencieusement car le chemin est incomplet.
Les deux méthodes font partie de Codage de valeur et ne doit généralement pas être utilisé pour l'accès des éléments dans les dictionnaires. Ils ne fonctionnent que sur des clés de type La différence entre les deux est que la spécification d'une clé (unique) ne pouvait que regarder cet élément. P>
Spécification d'un chemin de clé de l'autre main suit le chemin à travers les objets. Si vous aviez un dictionnaire de dictionnaires, vous pouvez rechercher un élément du deuxième niveau en utilisant un chemin de clé comme Si vous voulez simplement accéder à des éléments dans un dictionnaire, vous devez utiliser edit forte> pour répondre à la raison pour laquelle nstring code> et nécessitent une syntaxe spécifique. P>
"key1.key2" code>. P>.
objetforkey: code> et setObject: Forey: code>. p>.
ValueForKekey: code> ne doit pas être utilisé: p>
ValueForKey: code> fonctionne uniquement pour les clés de chaîne. Les dictionnaires peuvent utiliser d'autres objets pour les touches. LI>
ValueForKeKey: CODE> Poignez les touches qui commencent par un caractère "@" différemment. Vous ne pouvez pas accéder aux éléments dont les touches commencent par @ code>. Li>
ValueForKekey: Code> Vous dites: "J'utilise kvc". Il devrait y avoir une raison de faire cela. Lorsque vous utilisez ObjectForKey: CODE> Vous obtenez simplement des éléments dans un dictionnaire via l'API naturelle et prévue. Li>
ol>
Juste hors de curiosité, quelle est la raison pour laquelle ValueForKey: code> ne doit pas être utilisé avec des dictionnaires?
Bien qu'il s'agisse d'un autre exemple artificiel. P> P> Le clavier code> peut être utilisé pour traverser les chemins d'objets arbitraires, tant qu'ils implémentent nskeyvaluecoding code>. Ils n'ont pas besoin d'être Nsdicdiction Code> s. Par exemple:
Seulement différent si vous utilisez un dictionnaire plus complexe (avec plusieurs niveaux). La raison pour laquelle vous ressemble la même chose est qu'un clavier avec une seule chose (non
. Code> indiquant un composant de chemin supplémentaire) est en réalité une clé.