5

Desidero registrare qualsiasi NSNotifica inviata da un singolo NSNotificationCenter condiviso attraverso la mia applicazione. Ho provato la sottoclasse di NSNotificationCenter con l'intenzione di aggiungere il codice di registrazione ai tre metodi di post, ma restituisce un'istanza di CFNotification center invece della mia sottoclasse.Registrazione NSNotifications

Sicuramente esiste un modo per monitorare la registrazione NSNotification?

EDIT/UPDATE

Come due risposte di seguito correttamente sottolineano ho potuto ascoltare tutte le notifiche e il login un gestore, ma la sequenza del gestore avrebbe ricevuto queste notifiche è tutt'altro che garantito essere lo stesso del sequenza in cui sono stati inviati. Se potessi essere sicuro che il gestore sarebbe sempre il primo hander da notificare, funzionerebbe, ma non posso: "L'ordine in cui gli osservatori ricevono notifiche non è definito" Da NSNotification Docs

risposta

9

Utilizzando - addObserver:selector:name:object: e passando nil sia per il name e object, si otterrà una notifica di qualsiasi notifica.

- (id)init 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(log:) name:nil object:nil]; 
    } 
    return self; 
} 

- (void)log:(NSNotification *)notification 
{ 
    NSLog(@"%@", notification); 
} 

Edit: se si vuole ottenere il vero ordine delle notifiche essendo inviare, provare sottoclasse NSNotificationCenter e ridefinendo i seguenti metodi:

– postNotification: 
– postNotificationName:object: 
– postNotificationName:object:userInfo: 

Se sottoclassi alcuna opzione per tu potresti prendere in considerazione la definizione di una categoria su NSNotificationCenter in cui devi sostituire questi metodi con la chiamata alla super implementazione. (sarà necessario scambiare i metodi per chiamare super all'interno di una categoria). Dimmi se hai bisogno di aiuto per farlo.

+0

Grazie. Ma il problema è che non riesco a registrare il pre-invio. Sono lasciato per registrare le notifiche dopo che sono state inviate come osservatore in una posizione arbitraria nella sequenza di osservatori che sono stati notificati. Se riesco ad accedere al punto di spedizione, ho un'idea molto più chiara della sequenza di notifica. Questo tipo di listener globale potrebbe non essere notificato fino a quando un gestore precedente non ha attivato una sequenza di eventi, il che significa che non sarei in grado di vedere l'ordine di invio, solo l'ordine che questo particolare osservatore li ha ricevuti. – Undistraction

+0

Controlla la mia modifica;) –

+0

Grazie. Il problema è che quando si assegna/inizia un NSNotificationCenter non si ottiene un centro NSNotification. Ottieni un CFNotificationCenter. Lo stesso vale per una sottoclasse di NSNotificationCenter. Quindi sicuramente aggiungere una categoria a NSNotificationCenter non sarà di aiuto? – Undistraction

0

Dovresti essere in grado di utilizzare [addObserver: self-selector: @selector (qualunque cosa :) name: nil object: nil] e metti il ​​tuo codice di logging nel metodo any:. Questo osservatore dovrebbe ricevere tutte le notifiche postate dalla tua app (almeno quelle pubblicate dal centro predefinito).