NSTokenField

Bonjour,


 


J'ai sous-classé NSTokenField. Mes instances sont créées via IB.


J'ai overwrité la méthode



+ (NSCharacterSet *)defaultTokenizingCharacterSet

Bizarrement, elle n'est jamais appelée.


Je pense que c'est un bug...


 



Colas


Réponses

  • samirsamir Membre
    février 2016 modifié #2

    Tu dois l'appeler toi même non ?



    ... = [TaSousClass defaultTokenizingCharacterSet];

  • Joanna CarterJoanna Carter Membre, Modérateur
    Overrider defaultTokenizingCharacterSet (Qui est une méthode classe) ne sert à  rien. Il faut plutôt overrider tokenizingCharacterSet, qui est une méthode instance.
  • @Joanna Finalement, oui, Joanna, j'ai overridé `init` et `initWithCoder:`


     


    @samir Je pensais qu'en overiddant `+ defaultTokenizingCharacterSet`, à  l'init il prendrait automatiquement cet ensemble.


     


     


    @Joanna : pourquoi overrider pas overwritter ?


  • Joanna CarterJoanna Carter Membre, Modérateur
    février 2016 modifié #5


    @Joanna Finalement, oui, Joanna, j'ai overridé `init` et `initWithCoder:`


    C'était nécessaire ?


    @Joanna : pourquoi overrider pas overwritter ?


    Parce que le mot-clé est override ? Je crois que c'est plus correct d'utiliser surcharger, mais l'informatique est plein d'anglicismes ;)
  • colas_colas_ Membre
    février 2016 modifié #6

    @Joanna, je ne sais pas si c'était nécessaire, mais c'est la solution que j'ai choisie. A priori moins casse-gueule (si éventuels KVO).


     


    Pour overrider vs. overwrite, je trouvais que le sens de overwriter correspondait bien à  l'idée de réécrire la méthode.


  • Joanna CarterJoanna Carter Membre, Modérateur

    @Joanna, je ne sais pas si c'était nécessaire, mais c'est la solution que j'ai choisie. A priori moins casse-gueule (si éventuels KVO).


     

    Mais qu'est-ce que as mis les dedans ?

    Pour overrider vs. overwrite, je trouvais que le sens de overwriter correspondait bien à  l'idée de réécrire la méthode.




    Overwriter peut signifier plutôt remplacer, alors qu'une méthode override peut appeler sa version super.
  • Dans l'init, je sette la property tokenizingCharacterSet à  ce que je veux.
  • Joanna CarterJoanna Carter Membre, Modérateur
    Pourquoi pas overrider tokenizingCharacterSet pour qu'elle renvoie les caractères que tu veux ?
  • colas_colas_ Membre
    février 2016 modifié #10

    @Joanna ;


    Pour aucune raison particulière. Mais ta solution est plus "sioux" donc plus dangereuse. Imagine qu'il y ait un KVO sur NSTokenField du genre : si le KVO n'a pas été appelé, alors je ne regarde même pas le `- tokenizingCharacterSet` et je prends direct le `+defaultTokenizingSet` !!! Avec ta façon de faire, le KVO ne sera jamais déclenché, et donc sa valeur ne sera pas appelée. 


     


    (Bon, c'est un cas complètement improbable ce que je dis, mais on pourrait imaginer que le KVO soit appelé pour autre chose. Bon, comme la valeur est donnée dès l'init, ça ne changerait rien non plus... mais bon)


     


     


    ANALOGIE :


    De même, si tu sous-classes UIView en JoannaView et que toutes tes JoannaView sont de couleur redColor, comment feras-tu ?


     


    - changeras-tu `backgroundColor` à  l'init pour le mettre à  rouge ?


    - ou bien, tu vas overrider `- backgroundColor` du genre



    - (UIColor *)backgroundColor{
    return [UIColor redColor];
    }


    TLDR :


    Pour résumer, ta solution est "witty", maline,  donc oui on a envie de l'utiliser. Mais je préfère faire plus pédestre, simple et bête, mais plus sûr. Dans ce cas, je pense que ta solution ne pose pas de problème. Voilà  mon point de vue. 


     


     


    Je serais curieux d'avoir les points de vue d'autres contributeurs. Merci !


Connectez-vous ou Inscrivez-vous pour répondre.