NSNotificationCenter peut conduire à des bogues. Connaissez-vous des solutions plus élégantes?

StackOverflow https://stackoverflow.com/questions/9331675

  •  27-10-2019
  •  | 
  •  

Question

Je peux ajouter deux fois observateur (par accident) au centre de notification et je recevoir des notifications deux fois. Est-il possible d'obtenir une seule notification? Connaissez-vous des solutions plus élégantes?

Je vous montre cet exemple parce que cela peut conduire à des bogues.

- (void)viewDidLoad 
{
 [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardDidShow:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];
 [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardDidShow:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];
}

- (void)keyboardDidShow:(NSNotification *)ntf
{
}
Était-ce utile?

La solution

Si vous n'êtes pas sûr si vous avez ajouté l'observateur ailleurs, vous pouvez utiliser le code suivant à chaque fois que vous ajoutez un observateur

[[NSNotificationCenter defaultCenter] removeObserver:self name:aName object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:aSelector name:aName object:nil];

De cette façon, vous supprimez l'ancien (si elle existait) et l'ajout d'un nouveau.

Il est pas à 100% échouent la preuve, mais il est un début. Cela pourrait échouer dans les applications multithread où les appels sont faits async ou d'autres situations uniques.

Autres conseils

Vous pouvez également définir un objet à zéro, puis utiliser plus tard cet objet comme était toujours valide.

Tout ne peut pas se faire fail safe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top