今天发现在项目中抛出NSNotificationCenter的事件,一直执行不到回调函数。经过一番排查,发现原来是在注册时添加了Object参数,发送时,却没有填充Object参数。被坑了良久,在次记录一下。
代码简略如下:
@implementation TWGroupChatViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(test:) name:"NOTIFICATION_TEST" object:self];
}
-(void)test:(NSNotification*)notification
{
}
@end
在其他地方调用的代码:
[[NSNotificationCenter defaultCenter] postNotificationName:"NOTIFICATION_TEST" object:nil userInfo:nil];
问题所在:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(test:) name:"NOTIFICATION_TEST" object:self];这里的object参数传入了self,但是发出通知的地方,object参数却传入了nil,两者不一致,导致注册的函数不被调用。
改正方法:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(test:) name:"NOTIFICATION_TEST" object:nil];
添加事件时,将object参数传入nil即可。