Bug NSNotificationCenter

Hello,

Core un bug que j'arrive pas à corriger.

Pour supprimer des entrées j'utilise une fenêtre de confirmation et quand je ferme celle-ci ça envoie:

NSDictionary* robert = @{@"close": @"delete"}; [[NSNotificationCenter defaultCenter] postNotificationName:notifDelete object:nil userInfo:robert];

qui est reçu dans:
[[NSNotificationCenter defaultCenter] addObserverForName:@"deleteStreamListener" object:nil queue:nil usingBlock:^(NSNotification *note) { blablabla }];

et quand je quitte la vue je désactive:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"deleteStreamListener" object:nil];

ce qui n'a absolument aucun effet.

Le problème... quand je quitte la vue et que je reviens dessus ça me créé un nouveau ce qui fait que si je supprime une entrée ben ça m'en dégage 2, 3 4 etc.

Une idée ?

Réponses

  • klogklog Membre

    Sauf erreur, addObserverForName te renvoi un observer (type opaque)... Ce n'est pas la fenêtre qui est observer... Il faut que tu conserves l'objet renvoyé. C'est lui que tu passes en paramètre de removeObserver...

  • LarmeLarme Membre
    avril 2019 modifié #3

    Comme dit klog, tu as mélangé deux types d'observations.

    Regarde la doc de addObserverForName:object:queue:usingBlock:">addObserverForName:object:queue:usingBlock:

    C'est :

    myObserver = [[NSNotificationCenter default] addObserverForName:... object:... queue:... usingBlock:...]
    

    &

    [NSNotificationCenter default] removeObserver:myObserver name:... object:... ]
    

    ou

    [[NSNotificationCenter default] addObserver:self selector:... name:... object:...]
    

    &

    [[NSNotificationCenter default] removeObserver: self name:... object:...]
    
  • @klog a dit :
    Sauf erreur, addObserverForName te renvoi un observer (type opaque)... Ce n'est pas la fenêtre qui est observer... Il faut que tu conserves l'objet renvoyé. C'est lui que tu passes en paramètre de removeObserver...

    +1

    Utiliser - (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSNotificationName)aName object:(id)anObject; est une alternative viable.

  • avril 2019 modifié #5

    Résolu, merci beaucoup :)

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