如何侦听发送到iOS NSNotificationCenter的defaultCenter的所有通知?

时间:2011-10-31 14:14:53

标签: ios nsnotificationcenter

我想收听调度到defaultCenter的所有通知。公共和私人。有谁知道我怎么能这样做?

1 个答案:

答案 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 ,则通知中心不会使用   通知的发件人决定是否将块添加到   操作队列。

     

队列

     

应添加块的操作队列。如果你通过零,   该块在发布线程上同步运行。

     

     

收到通知时要执行的块。块   被通知中心复制并且(副本)一直保留到   观察员注册被删除。该块有一个参数:

     

通知

     

通知。