Pregunta

Estoy intentando conseguir un caso de utilización NSNotificationCenter con addObserver y postNotificationName pero no puedo entender por qué no va a funcionar.

Tengo 2 líneas de código para agregar el observador y enviar el mensaje en 2 clases diferentes

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(newEventLoaded:) name:@"Event" object:nil];

y

[[NSNotificationCenter defaultCenter]postNotificationName:@"Event" object:self];

Si fijo el nombre de nil que funciona bien becuase es sólo una emisión, cuando intento y definir un nombre de notificación de los mensajes nunca llegan a través.

¿Fue útil?

Solución

Todos mis marcas de código de uso de NSNotifications este modo:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView) name:@"ScanCompleted" object:nil];

[[NSNotificationCenter defaultCenter] postNotificationName:@"ScanCompleted" object:nil];

La primera de ellas es el registro de la notificación y la segunda publicación de la notificación.

Otros consejos

Básicamente es todo que ver con el orden de ejecución. Si ha ejecutado antes postNotificationName addObserver, entonces esto es un problema fácil de tener. Use puntos de interrupción y recorrer el código:)

Su primer punto de interrupción debe parar aquí:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView:) name:@"ScanCompleted" object:nil];

A continuación aquí:

[[NSNotificationCenter defaultCenter]postNotificationName:@"ScanCompleted" object:self];

Además, asegúrese de que el selector tiene dos puntos sucesivamente. Debido a que la firma del método será:

- (void)updateView:(NSNotification *)notification;

Yo tenía el mismo problema. La razón es que he llamado método removeObserver a

- (void)viewDidDisappear:(BOOL)animated{

    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];

   [notificationCenter removeObserver:self];

}

a fin de comprobar si si hubiera llamado antes removeObserver postNotification.

Consejos:. Se puede buscar la palabra clave "removeObserver" para encontrar si hubiera llamado esta función

Cambiar esto:

[[NSNotificationCenter defaultCenter]postNotificationName:@"Event" object:self];

a esto:

[[NSNotificationCenter defaultCenter]postNotificationName:@"Event" object:nil];

Si su primera notificación se ha registrado correctamente, newEventLoaded debe ser llamado.

Yo tenía un problema similar y mi problema era debido a la notificación de ser llamado en otro hilo. Esto resolvió mi problema.

dispatch_async(dispatch_get_main_queue(),^{
    [[NSNotificationCenter defaultCenter]postNotificationName:@"Event" object:self];
});

¿Usted ha intentado cualquier otro nombre, pero @ "Evento" y nula? Sólo para estar seguro, se podría definir sus nombres de eventos en un archivo y que lo incluya en tanto el registro y el envío de la notificación. Por ejemplo:

Archivo de cabecera:

extern NSString * const NOTE_myEventName;

Archivo de origen:

NSString * const NOTE_myEventName = @"MyEventName";

Registro:

[[NSNotificationCenter defaultCenter]
 addObserver:self
    selector:@selector(handleMyEvent:)
        name:NOTE_myEventName
      object:nil];

Notificación de envío de:

[[NSNotificationCenter defaultCenter]
    postNotificationName:NOTE_myEventName object:nil];

Me fija éxito mi "NSNotification no se envían cuando se postNotificationName: llamado" accidente.

He encontrado el error real es de controlador de mensajes de notificación.

El postNotificationName y addObserver están bien como el primer mensaje de este hilo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top