【发布时间】:2015-01-20 17:34:44
【问题描述】:
以下是我所拥有的。
MainViewController.m
- (IBAction)sideMenuAction:(id)sender {
NSLog(@"login==sideMenuAction");
[[NSNotificationCenter defaultCenter] postNotificationName:@"ShowMySideMenuNotification" object:self];
}
NotificationListener.m
-(void)viewDidLoad {
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"ShowMySideMenuNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(adjustShowMenu) name:@"ShowMySideMenuNotification" object:nil];
}
-(void) adjustShowMenu {
NSLog(@"notification adjustShowMenu=");
}
现在,当我单击 MainViewController 中的侧菜单按钮时,我期待的是从 NotificationListener 调用 adjustShowMenu 一次,但是它被调用了两次。
下面是相同的 NSLog。
2015-01-20 12:27:30.798 abc[699:169314] login==sideMenuAction
2015-01-20 12:27:30.798 abc[699:169314] notification adjustShowMenu=
2015-01-20 12:27:30.799 abc[699:169314] notification adjustShowMenu=
我期待的是
2015-01-20 12:27:30.798 abc[699:169314] login==sideMenuAction
2015-01-20 12:27:30.798 abc[699:169314] notification adjustShowMenu=
知道出了什么问题吗?
注意:我也试过用 viewDidAppear 代替 viewDidLoad,但结果相同。
当我在网上搜索时,很多答案都要求删除Observer。我做了同样的事情,但仍然有两次通知被调用。
【问题讨论】:
-
您确定只有一个 NotificationListener 实例吗?我怀疑肯定还有一个
-
这不是您添加/删除观察者的方式。您需要在需要时添加它,并在完成时将其删除,例如,将其添加到
viewWillAppear并删除viewWillDisappear或viewDidLoad/dealloc -
嗨,请按照这个答案解决我的问题。 stackoverflow.com/a/7751272/5581345
标签: ios objective-c nsnotificationcenter nsnotifications