Ist es möglich, alle Benachrichtigungen, die ein Objekt beobachtet, über NotificationCenter
aufzulisten?Wie listet man alle Benachrichtigungen auf, die ein Objekt beobachtet?
2
A
Antwort
0
Ich denke, dass es mit einem "hacky" Weg möglich ist: Swizzling verwenden, um die NSNotificationCenter.addObserver
Methode zu beobachten.
@implementation NSNotificationCenter (Swizzling)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
SEL originalSelector = @selector(addObserver:selector:name:object:);
SEL swizzledSelector = @selector(swizzling_addObserver:selector:name:object:);
Method originalMethod = class_getInstanceMethod(class, originalSelector);
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
BOOL didAddMethod =
class_addMethod(class,
originalSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (didAddMethod) {
class_replaceMethod(class,
swizzledSelector,
method_getImplementation(originalMethod),
method_getTypeEncoding(originalMethod));
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
});
}
- (void)swizzling_addObserver:(id)observer selector:(SEL)aSelector name:(NSNotificationName)aName object:(id)anObject {
//implement code here to store all notifications.
//then call original method (read in the link below to understand why we call **swizzling_addObserver** but not **addObserver**
[self swizzling_addObserver:observer selector:aSelector name:aName object:anObject];
}
Um mehr über Swizzling lernen Sie diesen Artikel lesen können: http://nshipster.com/method-swizzling/
0
Sie es durch Parsen [[NSNotificationCenter defaultCenter] debugDescription]
und die Suche nach Objektadressen tun könnte:
- Namen, Objekt, Beobachter, Optionen
- NSWindowWillEnterFullScreenNotification, 0x7fffb685e8e0, 0x6000001003f0, 1400
- _NSWindowDidChangeContentsHostedInLayerSurfaceNotification, 0x7fffb685e8e0, 0x6180000a4680, 1400
- NSAntialiasThresholdChangedNotification, 0x7fffb685e8e0, 0x6080001e0300, 1400
- kCFLocaleCurrentLocaleDidChangeNotification, 0x7fffb685e8e0, 0x7fffb685e9c0, 1001
- some_string, 0x7fffb685e8e0, 0x600000000210, 1400
- ...
Verwandte Themen
- 1. Javascript - wie man ein Objekt beobachtet
- 2. Wie listet man alle berechneten Eingaben auf?
- 3. Wie listet man alle Verzeichnisse rekursiv auf?
- 4. Wie listet man alle Git-Tags auf?
- 5. Wie listet man alle Symbole auf, die em ++ gefunden hat?
- 6. Wie listet man die konfigurierten Repositories auf?
- 7. Wie listet man alle veralteten Klassen in einer Datei auf?
- 8. Titan db wie listet man alle graphischen Indexe auf
- 9. Wie listet man alle Aufrufe einer Funktion zur Laufzeit auf?
- 10. Wie listet man alle Swift-konformen Klassen auf?
- 11. Wie listet man alle X11-Fenster mit Gtk3 auf :: Gdk
- 12. GitHub: Wie listet man alle privaten Repositories auf, die ein bestimmter Benutzer gespalten hat?
- 13. Wie listet man alle Benutzer in der Mongo Shell auf?
- 14. Wie listet man alle verfügbaren Gebietsschemata in Rails auf?
- 15. PostgreSQL: Wie listet man alle verfügbaren Datentypen auf?
- 16. Wie listet man alle Umgebungsvariablen in Vim auf?
- 17. Wie listet man alle azurcontainer mit nodejs auf?
- 18. Objective-C Wie listet man alle verfügbaren Netzbetreiber auf?
- 19. Wie listet man alle Python-Umgebungen unter Linux auf?
- 20. Wie listet man alle Elemente einer Anwendung auf?
- 21. Wie eckig js Mutationen im Objekt beobachtet?
- 22. Wie listet man alle Domänen in der Gesamtstruktur auf?
- 23. RxJs Wie man Objekteigenschaftsänderung beobachtet
- 24. Wie listet man alle Lesezeichen in NERDTree von VIM auf?
- 25. Wie listet man alle gültigen Zeitzonen für Linux auf?
- 26. Wie listet man alle internen Variablen von Julia auf?
- 27. Wie listet man alle laufenden mongod Prozesse auf?
- 28. Wie listet man alle verfügbaren Suchvorlagen in elasticsearch auf?
- 29. Wie listet man alle Versionen eines npm-Moduls auf?
- 30. Wie listet man Objektschlüsselnamen mit jsonpath auf?