web-dev-qa-db-ja.com

iOS NSNotificationCenterのdefaultCenterに送信されるすべての通知をリッスンするにはどうすればよいですか?

DefaultCenterにディスパッチされたすべての通知を聞きたいのですが。パブリックとプライベートの両方。誰か私がこれを行う方法を知っていますか?

46
Tony

NSNotificationCenterの _addObserverForName:object:queue:usingBlock:_ OR _addObserver:selector:name:object:_ メソッドを使用して、名前とオブジェクトにnilを渡します。

次のコードがその仕事をするはずです:

_- (void)dumpNotifications {
    NSNotificationCenter *notifyCenter = [NSNotificationCenter defaultCenter];
    [notifyCenter addObserverForName:nil 
                              object:nil 
                               queue:nil 
                          usingBlock:^(NSNotification *notification){
                             // Explore notification
                             NSLog(@"Notification found with:"
                                    "\r\n     name:     %@"
                                    "\r\n     object:   %@"
                                    "\r\n     userInfo: %@", 
                                    [notification name], 
                                    [notification object], 
                                    [notification userInfo]);
                          }];
}
_

文書

これが _addObserverForName:object:queue:usingBlock:_ に関するドキュメントです。特に、nameおよびobjパラメータを参照してください。

addObserverForName:object:queue:usingBlock:

通知キューとキューに追加するブロック、およびオプションの基準(通知名と送信者)を使用して、受信者のディスパッチテーブルにエントリを追加します。

- (id)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *))block

パラメータ

名前

オブザーバーを登録する通知の名前。つまり、この名前の通知のみがブロックを操作キューに追加するために使用されます。 nilを渡すと、通知センターは、通知の名前を使用してブロックを操作キューに追加するかどうかを決定しません。

obj

ブロックを操作キューに追加する通知のオブジェクト。 nilを渡すと、通知センターは、通知の送信者を使用して、ブロックを操作キューに追加するかどうかを決定しません。

キュー

ブロックを追加する必要がある操作キュー。 nilを渡すと、ブロックは投稿スレッドで同期的に実行されます。

ブロック

通知を受け取ったときに実行されるブロック。ブロックは通知センターによってコピーされ、オブザーバー登録が削除されるまで(コピー)保持されます。ブロックは1つの引数を取ります。

通知

通知。

74
Sam