オブジェクトが監視しているすべての通知をNotificationCenter
で一覧表示できますか?オブジェクトが監視しているすべての通知を一覧表示するにはどうすればよいですか?
2
A
答えて
0
「ハッキー」な方法で可能です:スウィズルを使ってNSNotificationCenter.addObserver
メソッドを観察してください。
@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];
}
スウィズリングの詳細については、あなたがこの記事を読むことができます: http://nshipster.com/method-swizzling/
0
あなたは[[NSNotificationCenter defaultCenter] debugDescription]
を解析し、オブジェクトのアドレスを検索することによってそれを行うことができます:
- 名、オブジェクト、オブザーバー、オプション
- NSWindowWillEnterFullScreenNotification、0x7fffb685e8e0、 0x6000001003f0,1400
- _NSWindowDidChangeContentsHostedInLayerSurfaceNotification、0x7fffb685e8e0、0x6180000a4680、1400
- NSAntialiasThresholdChangedNotification、0x7fffb685e8e0、 0x6080001e0300、1400
- kCFLocaleCurrentLocaleDidChangeNotification、 0x7fffb685e8e0、0x7fffb685e9c0、1001
- some_string、0x7fffb685e8e0、 0x600000000210、1400
- ...
関連する問題
- 1. Mathオブジェクトのすべてのプロパティを一覧表示するにはどうすればよいですか?
- 2. 作成したすべてのファイルを一覧表示するにはどうすればよいですか?
- 3. プログラムでABAPのすべてのテーブルを一覧表示するにはどうすればよいですか?
- 4. sqliteにデータベースのすべてのトリガを一覧表示するにはどうすればよいですか?
- 5. IExですべてのシェル変数を一覧表示するにはどうすればよいですか?
- 6. アセンブリ内のすべてのXAMLページを一覧表示するにはどうすればよいですか?
- 7. Informixのすべてのストアドプロシージャを一覧表示するにはどうすればよいですか?
- 8. アプリケーションのすべての要素を一覧表示するにはどうすればよいですか?
- 9. ディレクトリの内容をすべて一覧表示するにはどうすればよいですか?
- 10. 現在のチャンネルをすべて一覧表示するにはどうすればよいですか?
- 11. JNI、現在のインスタンスをすべて一覧表示するにはどうすればいいですか?
- 12. Ruby on Railsで通知の「監視」を設定するにはどうすればよいですか?
- 13. Subversionリポジトリの無視設定を一覧表示するにはどうすればよいですか?
- 14. 接続しているすべてのユーザーに通知するにはどうすればよいですか?
- 15. フォルダを除外してバケットのコンテンツを一覧表示するにはどうすればよいですか?
- 16. VB.netでオブジェクトが実装しているインターフェイスの一覧にオブジェクトの一覧をキャストするにはどうすればよいですか?
- 17. 別名を使用して一覧を表示するにはどうすればよいですか?
- 18. JavaScript - オブジェクトのプロパティを一覧表示するにはどうすればよいですか?
- 19. jqueryを使用してユーザーにポップアップ通知を表示するにはどうすればよいですか?
- 20. アンドロイドのチェックボックスを使ってエントリを一覧表示するにはどうすればよいですか?
- 21. Googleドライブに保存された/共有されているすべてのスプレッドシートを一覧表示するにはどうすればよいですか?
- 22. Rubyでクラスから作成されたすべてのオブジェクトを一覧表示するにはどうすればよいですか?
- 23. アプリが既に開いていて、通知が来たときにダイアログでプッシュ通知を表示するにはどうすればいいですか?
- 24. Vbs - 可視ウィンドウをすべて一覧表示する
- 25. Windowsで実行されているすべてのプロセスを一覧表示するにはどうすればよいですか?
- 26. GACに登録されているすべてのアセンブリを一覧表示するにはどうすればよいですか?
- 27. Windows XPにインストールされているすべてのアプリケーションを列挙/一覧表示するにはどうすればよいですか?
- 28. yoctoに接続されているすべてのUSBデバイス(プリンタ)を一覧表示するにはどうすればよいですか?
- 29. アプリケーションによって公開されるすべてのアクティビティを一覧表示するにはどうすればよいですか?
- 30. コンソールに汚れているCRMフィールドをすべて一覧表示するにはどうすればよいですか?