我想记录在我的应用程序中由单个NSNotificationCenter共享帐户发布的任何NSNotifications。我尝试对NSNotificationCenter进行子类化,目的是将日志代码添加到三个post方法中,但它返回的是CFNotification中心的一个实例,而不是我的子类。
当然,有一种方法可以监控NSNotification帖子?
编辑/更新
正如下面两个答案正确指出的那样,我可以侦听所有通知并将它们记录在处理程序中,但处理程序接收这些通知的顺序远不能保证与它们被发送的顺序相同。如果我能确保处理程序总是第一个收到通知的处理程序,这将会起作用,但我不能这样做:来自NSNotification Docs的“观察者接收通知的顺序未定义”
发布于 2012-04-17 23:51:25
通过使用- addObserver:selector:name:object:并为name和object传递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上定义一个类别,在这个类别中,您可以通过调用超级实现来覆盖这些方法。(你需要在一个类别中使用swizzle方法来调用super )。如果您需要帮助,请告诉我。
发布于 2012-04-17 23:45:02
您应该能够使用and :self selector:@selector(and:) name:nil object:nil,只需将您的日志代码放入and:方法中即可。此观察者应获取您的应用程序发布的所有通知(至少是默认中心发布的所有通知)。
https://stackoverflow.com/questions/10193858
复制相似问题