2011-10-31 51 views

回答

71

使用NSNotificationCenter的addObserverForName:object:queue:usingBlock: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

参数

名称

通知为其中注册观察者的名称; 是,只有具有该名称的通知才用于将该块添加到 操作队列中。 如果您通过零,通知中心不使用 通知的名称来决定是否将块添加到 操作队列。

OBJ

对象要块添加到 操作队列谁的通知。 如果您通过零,通知中心不使用 通知的发件人决定是否将块添加到 操作队列。

队列

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

该块所接收的通知时要执行。块 由通知中心复制和(复制)保持,直到 观察者登记被删除。块有一个参数:

通知

的通知。

+1

很好的答案。但是,对于任何可能复制/粘贴解决方案的人来说,都有几种类型。 “notifyCenter”应该是一个对象,所以它应该是“* notifyCenter”。 NSLog语句在开始时缺少'@'符号。 – Keller

+0

@凯勒 - 感谢您的评论。我修改了我的答案以包含修复程序。 – Sam

+7

没问题。具有讽刺意味的是,我刚刚注意到我在我以前的评论中拼写错误“拼写错误” – Keller

相关问题