2012-11-07 4 views
12

Ich möchte eine Liste von Beobachtern (Objekte und Selektoren) für einen bestimmten Benachrichtigungsnamen abrufen. Ich weiß, dass es dafür keine offizielle API gibt. Ich weiß auch, ich könnte subclass NSNotificationCenter dies erreichen. Manchmal ist dies jedoch keine praktikable Option, da die Nutzung von NSNotificationCenter über den gesamten Code oder sogar binäre Frameworks verteilt ist.Wie ruft man alle NSNotificationCenter-Beobachter ab?

Also ich bin auf der Suche nach einem inoffiziellen/privaten Weg, dies zu tun. (Da es nur Debugging ist, ist das in Ordnung.)

+0

Sie können nur wollen die Methoden swizzle, damit Sie das Objekt erhalten: http://cocoadev.com/wiki/MethodSwizzling – rckoenes

+0

Hier ist eine Antwort, die Swizzling implementiert, um Beobachter zu verfolgen http://stackoverflow.com/questions/10346700/ns Notificationcenter-Liste-der-Beobachter/34692724 # 34692724 –

Antwort

17

Schließlich Apple eine Art und Weise hinzugefügt alle Benachrichtigungszentrum Beobachter zu drucken:

po [NSNotificationCenter defaultCenter] 

Es gibt eine durch Kommata getrennte Liste mit Namen, Objekt, Beobachter und Optionen:

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

Wenn Sie nicht möchten NSNotificationCenter UnterklasseMethode umbenennen und erstellen Sie Ihre eigenen mit solchen Namen und fügen Sie Beobachter dort zu einigen Array dann original umbenannten Methode aufrufen .

Schauen Sie sich folgende Methoden an: class_addMethod, class_replaceMethod, class_getMethodImplementation.

Schauen Sie auch in dieser Frage SO: Method Swizzling

Ich bin nicht sicher, warum Sie Beobachter wollen, aber Sie können diese Klasse nützlich finden, die Beobachter für Sie automatisch entfernt, die ich vielleicht denken, was Sie wollen. SFObservers

+0

+1 für 'SFObservers'! Die SO-Frage, auf die Sie zeigen, ist eigentlich von mir (einschließlich der Lösung) ;-) –

+0

Hahah, schöne Lösung & Frage: D –

+0

Hier ist eine Antwort, die Swizzling implementiert, um Beobachter zu verfolgen http://stackoverflow.com/questions/10346700/nsnotificationcenter-list-of-observer/34692724 # 34692724 –