Logging NSNotifications



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

肯定有一种方法可以监控NSNotization发布吗?

编辑/更新

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

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

- (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)。告诉我您是否需要帮助。

你应该能够使用 [addObserver:self selector:@selector(whatever:)名称:nil 对象:nil],只需将您的日志记录代码放在 Whatever: 方法中即可。 此观察者应获取应用发布的所有通知(至少是默认中心发布的所有通知)。

最新更新