6

En mi aplicación para el iPad, en una clase me registro para una notificación:selector de NSNotificationCenter no siendo llamado

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
    [nc addObserver:self selector:@selector(selectedList:) name:@"TTSelectedList" object:nil]; 

Mi método selectedList: se parece a esto:

- (void)selectedList:(NSNotification*)notification 
{ 
    NSLog(@"received notification"); 
} 

Luego, en otra clase (un UITableViewController) Publiqué esa notificación cuando se selecciona una fila:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"posting notification"); 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"TTSelectedList" object:nil]; 
} 

Puedo confirmar que la notificación se está publicando, porque la "notificación de publicación" se registra en la consola, pero nunca se llama a "notificación recibida", lo que significa que la notificación no se recibe y no se ha llamado al selector. No puedo entender qué está causando esto.

Gracias

+1

Algo estúpido, pero que me dejó perplejo por un tiempo. Tuve el mismo problema. En mi caso, no noté que una subclase tenía un método con el mismo selector que el que estaba tratando de declarar en la clase principal. –

+0

Tenía esto yo mismo, también algo estúpido: estaba publicando una notificación con una letra minúscula en lugar de una letra mayúscula. Son sensibles a mayúsculas y minúsculas –

Respuesta

14

La causa más probable es que usted no está realmente llamando addObserver:selector:name:object:. Usted no tiene una línea de registro allí; ¿estás seguro de que el código se está ejecutando?

La segunda causa más probable es que llame al removeObserver: antes de que se publique la notificación. Esto es más comúnmente en dealloc (que debe siempre llamar al removeObserver si alguna vez ha observado algo). El error aquí sería que su objeto de observación ha desasignado antes de la notificación.

+0

Tenías razón, estaba creando el objeto que era el observador en Interface Builder, y no estaba siendo retenido por nada. Gracias. – indragie

+0

Tuve el mismo problema. Agregué el observador en el método 'init' en lugar de' initWithStyle' – testing

+1

Si usa IB para hacer sus cosas, es probable que no se llame a init. Use initWithCoder o awakeWithNib dependiendo de lo que quiera hacer. – futureelite7

Cuestiones relacionadas