我想收听调度到defaultCenter的所有通知。公共和私人。有谁知道我怎么能这样做?
答案 0 :(得分:74)
使用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:
上的文档。特别是,请参阅名称和 obj 参数。
<强> addObserverForName:对象:队列:usingBlock:强>
通过通知向接收方的调度表添加条目 队列和要添加到队列的块,以及可选标准: 通知名称和发件人。
- (id)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *))block
<强>参数强>
名称
注册观察员的通知的名称;那 是,只有具有此名称的通知用于将块添加到 操作队列。 如果您通过nil ,则通知中心不会使用 通知的名称,以决定是否将块添加到 操作队列。
OBJ
要将其块添加到其通知的对象 操作队列。 如果您通过nil ,则通知中心不会使用 通知的发件人决定是否将块添加到 操作队列。
队列
应添加块的操作队列。如果你通过零, 该块在发布线程上同步运行。
块
收到通知时要执行的块。块 被通知中心复制并且(副本)一直保留到 观察员注册被删除。该块有一个参数:
通知
通知。