【发布时间】:2015-05-01 00:36:27
【问题描述】:
我有一个带有多个 ViewController 的标签栏应用程序,并将它们嵌入到一些导航控制器中。
我用谷歌搜索并尝试将观察者添加到第一个 detailVC 的 viewDidLoad / viewWillAppear / viewDidAppear 并删除相关 viewWillDisappear / viewDidDisappear 中的观察者
对我的第二个detailVC(也嵌入在导航控制器中)执行模型segue,在那里我点击一个名为postNotification的按钮然后关闭第二个detailVC,自定义选择器函数被调用它工作正常。如果我回到 masterVC 再次执行上述过程,该函数将被调用两次,依此类推。
顺便说一句,我在添加观察者时遵循此协议。
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"replyPosted" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addNewComment:) name:@"replyPosted" object:nil];
点击按钮方法
[self dismissViewControllerAnimated:YES completion:nil];
NSDictionary *userinfo = @{@"reply_id":[result valueForKey:@"reply_id"],@"comment":comment};
[[NSNotificationCenter defaultCenter] postNotificationName:@"replyPosted" object:self userInfo:userinfo];
更新!
通过检查导航堆栈中的第一个 DetailVC 并在 viewWillDisappear 中添加几行来解决问题
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"%@",self.navigationController.viewControllers);
//to check currentVC in navigation stack or not
if([self.navigationController.viewControllers indexOfObject:self] == NSNotFound){
NSLog(@"remove observer from viewWillDisappear");
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"replyPosted" object:nil];
}
}
【问题讨论】:
-
请告诉我“点击按钮”方法。
-
@SumitGarg 添加我的标签按钮方法。
-
在标签按钮方法的开头添加这一行
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"replyPosted" object:nil];。 -
@SumitGarg 它不起作用。我在
viewWillAppear中添加了观察者代码,如果我在viewWillDisappear中添加删除观察者,我的选择器函数将永远不会被调用。我只是想知道为什么添加观察者中的这条线不起作用[[NSNotificationCenter defaultCenter] removeObserver:self name:@"replyPosted" object:nil];
标签: ios objective-c nsnotificationcenter