2012-11-07 14 views
12

Vorrei recuperare un elenco di osservatori (oggetti e selettori) per un determinato nome di notifica. So che non ci sono API ufficiali per questo. So anche che potrei farlo subclass NSNotificationCenter. A volte, tuttavia, questa non è un'opzione valida perché l'utilizzo di NSNotificationCenter è distribuito su tutto il codice o persino su framework binari.Come recuperare tutti gli osservatori di NSNotificationCenter?

Quindi sto cercando un modo non ufficiale/privato per farlo. (Dal momento che si tratta solo di debug, va bene.)

+0

si può solo voglio swizzle i metodi in modo da ottenere l'oggetto: http://cocoadev.com/wiki/MethodSwizzling – rckoenes

+0

qui è una risposta che implementa il swizzling per rintracciare gli osservatori http://stackoverflow.com/questions/10346700/ns notificationcenter-list-of-observers/34692724 # 34692724 –

risposta

17

Infine, Apple ha aggiunto un modo per stampare tutti gli osservatori centro di notifica:

po [NSNotificationCenter defaultCenter] 

stampa un elenco separato da virgola con nome, oggetto, Observer, e Opzioni:

<NSNotificationCenter:0x7f997b307500> 
Name, Object, Observer, Options 
WebPreferencesRemovedNotification, 0x11165b680, 0x116c87ff8, 1400 
UIApplicationWillEnterForegroundNotification, 0x11165b680, 0x7f997a838000, 1400 
... 
1

Se non si desidera sottoclasse NSNotificationCenter è possibile rinominare il metodo originale addObserver:selector:name:object e crearne uno proprio con tale nome e aggiungere osservatori all'interno di alcuni array quindi chiamare il metodo rinominato originale .

Dai uno sguardo ai seguenti metodi: class_addMethod, class_replaceMethod, class_getMethodImplementation.

un'occhiata anche a questo SO domanda: Method Swizzling

io non sono sicuro perché si vuole osservatori, ma si potrebbe trovare questa classe utile, che rimuove gli osservatori automaticamente per voi che credo potrebbe essere quello che vuoi. SFObservers

+0

+1 per 'SFObservers'! La domanda SO che stai indicando è in realtà da me (inclusa la soluzione) ;-) –

+0

Hahah, bella soluzione e domanda però: D –

+0

ecco una risposta che implementa lo swizzling per rintracciare gli osservatori http://stackoverflow.com/domande/10346700/osservatori NSNotificationCenter-list-of-/ 34692724 # 34692724 –

Problemi correlati