2011-10-31 12 views

Respuesta

71

Use NSNotificationCenter addObserverForName:object:queue:usingBlock: O addObserver:selector:name:object: método y pase nil para el nombre y el objeto.

Ejemplo

El siguiente código debe hacer el trabajo:

- (void)dumpNotifications { 
    NSNotificationCenter *notifyCenter = [NSNotificationCenter defaultCenter]; 
    [notifyCenter addObserverForName:nil 
           object:nil 
           queue:nil 
          usingBlock:^(NSNotification *notification){ 
          // Explore notification 
          NSLog(@"Notification found with:" 
            "\r\n  name:  %@" 
            "\r\n  object: %@" 
            "\r\n  userInfo: %@", 
            [notification name], 
            [notification object], 
            [notification userInfo]); 
          }]; 
} 

Docs

Aquí están los documentos en addObserverForName:object:queue:usingBlock:. En particular, consulte los parámetros y obj.

addObserverForName: Objeto: cola: usingBlock:

añade una entrada a la tabla de despacho del receptor con una cola de notificaciones y un bloque de añadir a la cola, y los criterios opcionales: nombre de notificación y remitente.

- (id)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *))block

Parámetros

nombre

El nombre de la notificación para el que desee registrar el observador; que es, solo las notificaciones con este nombre se utilizan para agregar el bloque a la cola de operaciones . Si pasa cero, el centro de notificación no utiliza el nombre de una notificación para decidir si se debe añadir el bloque a la cola de operaciones .

obj

El objeto cuyas notificaciones que desea añadir el bloque a la cola operación. Si pasa nil,, el centro de notificaciones no usa un remitente de notificación para decidir si agrega el bloque a la cola de operaciones .

cola

La cola de operación a la que debe añadirse bloque. Si pasa nil, , el bloque se ejecuta de forma síncrona en el hilo de publicación.

bloque

El bloque a ejecutar cuando se recibe la notificación. El centro de notificaciones copia el bloque y (la copia) se mantiene hasta que se elimine el registro del observador .El bloque toma un argumento:

notificación

la notificación.

+1

Buena respuesta. Sin embargo, para cualquier persona que potencialmente copie/pegue la solución, existen algunos tipos. "notifyCenter" debería ser un objeto, por lo que debería ser "* notifyCenter". Y a la declaración NSLog le falta el símbolo '@' al comienzo. – Keller

+0

@Keller - gracias por el comentario. Enmendé mi respuesta para incluir tus correcciones. – Sam

+7

No hay problema. Irónicamente, me acabo de dar cuenta de que escribí mal los "errores tipográficos" en mi comentario anterior; p – Keller

Cuestiones relacionadas