5

我想记录在我的应用程序中共享的单个 NSNotificationCenter 发布的任何 NSNotifications。我尝试将 NSNotificationCenter 子类化,以便将日志记录代码添加到三个 post 方法,但它返回 CFNotification center 的实例而不是我的子类。

肯定有监控 NSNotification 发布的方法吗?

编辑/更新

正如下面的两个答案正确指出的那样,我可以收听所有通知并将它们记录在处理程序中,但是处理程序接收这些通知的顺序远不能保证与发送它们的顺序相同。如果我可以确定处理程序将始终是第一个收到通知的处理程序,这将起作用,但我不能:'观察者接收通知的顺序未定义'来自NSNotification Docs

4

2 回答 2

9

通过使用- addObserver:selector:name:object:并传递nilthename和 the object,您将收到有关任何通知的通知。

- (id)init
{
    self = [super init];
    if (self != nil)
    {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(log:) name:nil object:nil];
    }
    return self;
}

- (void)log:(NSNotification *)notification
{
    NSLog(@"%@", notification);
}

编辑:如果您想获得发送通知的真实顺序,请尝试子类NSNotificationCenter化并覆盖以下方法:

– postNotification:
– postNotificationName:object:
– postNotificationName:object:userInfo:

如果子类化不是您的选择,您可以考虑定义一个类别,在NSNotificationCenter其中通过调用超级实现来覆盖这些方法。(您需要调配方法以在一个类别中调用 super)。如果您需要帮助,请告诉我。

于 2012-04-17T15:51:25.280 回答
0

您应该能够使用 [addObserver:self 选择器:@selector(whatever:) name:nil object:nil] 并将您的日志记录代码放在whatever: 方法中。这个观察者应该得到你的应用程序发布的所有通知(至少是默认中心发布的所有通知)。

于 2012-04-17T15:45:02.467 回答