Un UIViewController
s'ajoute au centre par défaut:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(editFood)
name:@"editFood"
object:nil];
Un UITableView
délégué NSObject publie un NSNotification
:
[[NSNotificationCenter defaultCenter]
postNotificationName:@"editFood"
object:self];
Pendant l'exécution, il obtient une exception EXC_BAD_ACCESS.
Le defaultCenter
est-il sorti quelque part? Le même concept fonctionne lorsque je poste une notification à un UIViewController à partir d'un UIViewController, mais cela ne devrait pas avoir d'importance, non?
Un de vos abonnés a été désalloué. Assurez-vous d'appeler [[NSNotificationCenter defaultCenter] removeObserver:self]
dans votre dealloc (sinon plus tôt).
EXC_BAD_ACCESS
peut se produire même après avoir vérifié que dealloc existe comme ceci:
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self]
}
Ce qui précède résoudra le problème la plupart du temps, mais apparemment, ma cause était que j'ajoutais indirectement l'observateur avec un selector:
défini sur nil
comme suit:
[NSNotificationCenter.defaultCenter addObserver:self
selector:nil
name:notificationName
object:nil];
... donc quand j'ai posté quelque chose avec ça notificationName
, EXC_BAD_ACCESS
eu lieu.
La solution était d'envoyer un sélecteur qui pointe réellement vers quelque chose.