Ajouter des protocoles à  mon delegate

Bonjour !


 


J'ai sous-classé NSTextView et je voudrais ajouter un protocole à  son delegate.


J'ai essayé de faire ceci : 




@interface MyCBDTextView ()

@property (nonatomic, readwrite, weak) id< MyCBDTextViewDelegate> delegate ;

@end



@implementation MyCBDTextView

...

J'ai tout d'abord été étonné parce que le compilateur n'a pas tiqué sur cette redéfinition de delegate avec un type différent. Je me suis dit : wow, ils ont été malins chez Apple, on peut redéfinir un type en ajoutant des protocoles !!!


 


 


Le problème c'est que depuis que j'ai fait ça, les méthodes de NSTextViewDelegate ne sont plus appelées !!


 


 


Je sais comment remédier à  ce problème (par exemple ne pas redéfinir et caster le delegate dans les méthodes), mais ma question c'est : Que se passe-t-il à  votre avis ??


 


Merci


 


Colas


Réponses

  • AliGatorAliGator Membre, Modérateur
    avril 2014 modifié #2
    C'est bizarre que le compilo n'ait pas gueulé, car en effet tu redéfinis une propriété déjà  existante dans la classe mère, mais avec un type différent, il devrait au minimum te mettre un warning.

    Le coup des méthodes de NSTextViewDelegate qui ne sont pas appellées, c'est normal, tu es dans le forum iOS, y'a pas de NSTextViewDelegate ça n'existe pas dans le SDK iOS.

    La bonne solution de toute façon c'est d'utiliser une @property différente (myDelegate, ou autre) car on ne peut pas changer le type d'une propriété existante héritée de la classe mère.
  • À force de vouloir que l'on poste dans le bon forum, tu t'y trompes Ali ! Je suis dans le forum sur les API communes. Ma question porte plus sur l'Objective-C que sur telle ou telle classe.


     



  • AliGatorAliGator Membre, Modérateur
    Ah oui bien vu :D C'est moi qui ne suis pas bien réveillé après ma semaine de vacances en Turquie, la reprise est dure :D

    Mais bon ça reste bizarre qu'il ne t'appelle pas les méthodes du coup, j'ai du mal à  comprendre pourquoi il ne te fait ni warning ni appel aux méthodes, mais toujours est-il que tu vas être de toute façon obligé de créer une autre propriété car je ne pense pas que tu puisses changer le type de la propriété "delegate" existante dans la classe mère ;)
  • mpergandmpergand Membre
    avril 2014 modifié #5

    je ferais :



    - (void)setDelegate:(id < NSTextViewDelegate, MonProtocol >) delegate
    {
    [super setDelegate:delegate];
    }

    pas testé ...


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