Notification. Identification de l'objet qui notifie

RocouRocou Membre
23:21 modifié dans API AppKit #1
Bonjour,

Dans mon code, j'ai une méthode "notif" qui est appelée lorsqu'une notification est envoyée par un objet.
ça fonctionne mais je me suis aperçu qu'une notification est envoyée par tous les objets d'une même classe. Je n'ai pas réussi à  éviter cela.

Aussi, dans le code de ma méthode "notif", j'ai tenté de réduire un peu la quantité de ces objets perturbateurs par ce test:
if ([[[aNotification object] className] isEqualToString:@"NSClipView"])


Mais j'aimerais bien pouvoir cibler un outlet lié à  un objet précis et non  à  tout une classe.

Réponses

  • 23:21 modifié #2
    <br />if([[aNotification object] isEqualTo:myClipView])<br />
    

    Tu peux faire comme ça tout simplement.
  • mpergandmpergand Membre
    23:21 modifié #3
    Dans la méthode:
    - (void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender

    si tu spécifies un objet, les notifications seront limitées à  cet objet.

    notificationSender
    The object whose notifications the observer wants to receive; that is, only notifications sent by this sender are delivered to the observer. When nil, the notification center doesn't use a notification's sender to decide whether to deliver it to the observer.

  • RocouRocou Membre
    23:21 modifié #4
    dans 1250237725:

    <br />if([[aNotification object] isEqualTo:myClipView])<br />
    

    Tu peux faire comme ça tout simplement.

    ça j'ai essayé mais je n'entre jamais dans mon test. Tout ce passe comme si mon outlet n'était pas relié à  l'objet qui lance la notification.

    J'initialise ma notification comme ceci:
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];<br />		[nc addObserver:self selector:@selector(notif:) name:NSViewBoundsDidChangeNotification object:monScroll];
    


    et monScroll est déclaré comme ceci:
    IBOutlet MaScrollView *monScroll;
    


    et MaScrollView est une classe de type NSScrollView que j'ai liée sous IB à  l'objet NSScrollView dont je veux récupérer la notification.

    Ouf.
    Ce n'est sûrement pas très catholique mais j'ai bien galéré pour trouver une solution fonctionnelle à  mon problème.
    Aujourd'hui j'essaie de réécrire les choses dans les règles de l'art mais pour cela, il faut que j'en comprenne les mécanismes  :)
  • RocouRocou Membre
    23:21 modifié #5
    dans 1250239493:

    Dans la méthode:
    - (void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender

    si tu spécifies un objet, les notifications seront limitées à  cet objet.

    notificationSender
    The object whose notifications the observer wants to receive; that is, only notifications sent by this sender are delivered to the observer. When nil, the notification center doesn't use a notification's sender to decide whether to deliver it to the observer.


    Oui, je sais mais en pratique, ça ne fonctionne pas. (dans mon code en tout cas  :( )
  • mpergandmpergand Membre
    23:21 modifié #6
    dans 1250240615:

    Oui, je sais mais en pratique, ça ne fonctionne pas. (dans mon code en tout cas  :( )


    Pourtant c'est exactement ce que tu fais:
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];<br />		[nc addObserver:self selector:@selector(notif:) name:NSViewBoundsDidChangeNotification object:monScroll];
    


    et ça marche non ?

    Le truc , c'est que ton outlet devait être à  nil  ;)


  • RocouRocou Membre
    23:21 modifié #7
    [quote author=mpergand link=topic=4226.msg42640#msg42640
    Le truc , c'est que ton outlet devait être à  nil  ;)
    [/quote]
    Ben non. A un autre endroit du code, je fais:
    NSPoint local_point = [self convertPoint:posSouris fromView:monScroll];
    

    Et ça fonctionne très bien.

    Ou alors mon outlet est à  nil au moment ou j'initialise la notification (dans la méthode initWithFrame de ma vue)??
  • mpergandmpergand Membre
    23:21 modifié #8
    dans 1250244216:

    Ou alors mon outlet est à  nil au moment ou j'initialise la notification (dans la méthode initWithFrame de ma vue)??


    Gagné  :)
  • yoannyoann Membre
    23:21 modifié #9
    Dès que ça concerne quelque chose en rapport avec le nib et qui doit être fait au lancement tu passe par la méthode awakeFromNib à  la place de init.
  • RocouRocou Membre
    23:21 modifié #10
    dans 1250255700:

    Dès que ça concerne quelque chose en rapport avec le nib et qui doit être fait au lancement tu passe par la méthode awakeFromNib à  la place de init.

    ça n'a rien changé  :'(
  • RocouRocou Membre
    23:21 modifié #11
    dans 1250257323:

    dans 1250255700:

    Dès que ça concerne quelque chose en rapport avec le nib et qui doit être fait au lancement tu passe par la méthode awakeFromNib à  la place de init.

    ça n'a rien changé  :'(

    Le pire, c'est que tout objet affichant des ascenseurs déclenche la méthode, qu'il soit dans la vue, à  côté voire dans une autre fenêtre  :'(
Connectez-vous ou Inscrivez-vous pour répondre.