Pourquoi mon NSNotification son observateur appelé plusieurs fois?

Dans une Application, j'utilise plusieurs viewcontrollers. Sur un viewcontroller un observateur est initialisé de la façon suivante:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MyNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethod:) name:@"MyNotification" object:nil];

Même lors du retrait de la NSNotification avant d'initialiser le nombre d'exécutions de myMethod: est résumée par le montant de la répétition des vues sur le viewcontroller.

Pourquoi cela se produit et comment puis-je éviter de myMethod: être appelé plus d'une fois.

Note: j'ai fait en sorte en utilisant des points d'arrêt que je n'ai pas fait des erreurs sur l'appel de postNotification plusieurs fois.

Edit: C'est ainsi que ma postNotification ressemble

NSArray * objects = [NSArray arrayWithObjects:[NSNumber numberWithInt:number],someText, nil];
NSArray * keys = [NSArray arrayWithObjects:@"Number",@"Text", nil];
NSDictionary * userInfo = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:self userInfo:userInfo];

edit: même après le déménagement de mon abonnement à viewwillappear: j'obtiens le même résultat. myMethod: est appelée plusieurs fois. (nombre de fois que je recharge la viewcontroller).

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"MyNotification" object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethod:) name:@"MyNotification" object:nil];
}

edit: quelque chose semble mal avec mon cycle de vie. ViewDidUnload et dealloc ne sont pas appelé, cependant viewdiddisappear est appelé.

La façon dont je l'ai pousser mon Viewcontroller de la pile est comme suit, où le parent est un tableview sous-classe (en cliquant sur la ligne cette viewcontroller est lancée:

detailScreen * screen = [[detailScreen alloc] initWithContentID:ID andFullContentArray:fullContentIndex andParent:parent];
[self.navigationController pushViewController:screen animated:YES];

Solution:

Mouvement de suppression de nsnotification à viewdiddisappear a fait le tour. Merci pour les conseils!

  • votre solution fonctionne pour moi thanq....
  • thnx solution : aidé
InformationsquelleAutor BarryK88 | 2013-11-06