sélecteur NSNotificationCenter pas appelé
-
02-10-2019 - |
Question
Dans mon application iPad, dans une classe I pour enregistrer une notification:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(selectedList:) name:@"TTSelectedList" object:nil];
Ma méthode selectedList:
ressemble à ceci:
- (void)selectedList:(NSNotification*)notification
{
NSLog(@"received notification");
}
Ensuite, dans une autre classe (un UITableViewController
) Je posterai cette notification lorsqu'une ligne est sélectionnée:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"posting notification");
[[NSNotificationCenter defaultCenter] postNotificationName:@"TTSelectedList" object:nil];
}
Je peux confirmer que la notification est affichée, parce que « notification d'affichage » est connecté à la console, mais « notification reçue » est jamais appelée, ce qui signifie que la notification ne reçoit pas et le sélecteur n'a pas été appelé. Je ne peux pas comprendre ce qui cause cela.
Merci
La solution
La cause la plus probable est que vous n'êtes pas vraiment appeler addObserver:selector:name:object:
. Vous ne disposez pas d'une ligne d'exploitation forestière là; êtes-vous sûr que le code est en cours d'exécution?
La deuxième cause la plus probable est que vous appelez removeObserver:
avant la notification est affichée. Ceci est le plus souvent dans dealloc
(qui devrait toujours appel removeObserver
si vous avez jamais rien observé). L'erreur ici serait que votre objet d'observation a désallouée avant la notification.