以下是我所拥有的。
- (IBAction)sideMenuAction:(id)sender {
NSLog(@"login==sideMenuAction");
[[NSNotificationCenter defaultCenter] postNotificationName:@"ShowMySideMenuNotification" object:self];
}
-(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。我做了同样的事情,但仍有两次通知被调用。
答案 0 :(得分:0)
根据answer here,我进行如下更改,现在工作正常。
-(void) viewWillAppear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(adjustShowMenu) name:@"ShowMySideMenuNotification" object:nil];
}
-(void) viewWillDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"ShowMySideMenuNotification" object:nil];
}