Méthodes clé-valeur et setters/getters perso ?

NeofelisNeofelis Membre
15:30 modifié dans Objective-C, Swift, C, C++ #1
Bonjour,

Je me posais une question. Les méthodes valueForKey et setValue:forKey: utilisent en interne les setters et getters des membres des objets. Que se passe-t-il lorsque le setters et getters sont personnalisés (possible dans la déclaration d'une propriété). Visiblement les méthodes clé-valeur ne fonctionnent plus. Y a-t-il une possibilité de réparer ça ?

Réponses

  • CéroceCéroce Membre, Modérateur
    15:30 modifié #2
    1) Le Key-value coding utilise par défaut les accesseurs (setters et getters) qui ont le nom -setClef: et -getClef. S'ils ne sont pas définis, la variable d'instance du nom de la clef est accèdée directement (peut être désactivé).

    2) Par défaut, synthétiser une propriété génère des méthodes -setPropriété: et -getPropriété.

    A priori, si on renomme les accesseurs, la variable d'instance sera donc accèdée directement.
    Maintenant, je ne vois pas en quelle circonstance on utiliserait le KVC avec le nom de la variable d'instance plutôt que le nom de la propriété. Un exemple serait bienvenu...
  • AliGatorAliGator Membre, Modérateur
    15:30 modifié #3
    Il n'y a aucun pb à  utiliser le KVC tout en personnalisant son setter/getter, du moment que ces derniers gardent les conventions de nommage citées par Céroce et indiqués en détail dans le Programming Guide sur le KVC.

    En gros que tu utilises @synthesize pour générer ton setter/getter, ou que tu écrives le code de -setMachin et -machin toi-même, pour le KVC ça change rien. C'est vraiment si tu utilises un autre nom, non standard (pour ce qui est "standard", voir la doc sur le KVC, par exemple pour les accesseurs BOOL je crois que "isMachin" est toléré en alternative à  juste "machin", faut lire le guide), pour ton setter que là  le KVC peut pas le retrouver tout seul. Par exemple si tu définis [tt]@property(setter=plouf, getter=boum)[/tt] là  forcément le KVC ne peux pas savoir tout seul... mais en même temps je n'ai jamais vu de cas où il était utile de définir un setter autre que celui standard donc bon?
  • NeofelisNeofelis Membre
    15:30 modifié #4
    Par exemple si tu définis @property(setter=plouf, getter=boum) là  forcément le KVC ne peux pas savoir tout seul... mais en même temps je n'ai jamais vu de cas où il était utile de définir un setter autre que celui standard donc bon?


    Oui c'est ce genre de cas auquel je faisais allusion. Merci !
Connectez-vous ou Inscrivez-vous pour répondre.