【问题标题】:Navigation Controller NSNotificationCenter addObserver get called multiple times导航控制器 NSNotificationCenter addObserver 被多次调用
【发布时间】: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


【解决方案1】:

viewWillDisappear 中,如果第一个 detailVC 在导航控制器堆栈中,则不执行任何操作,否则删除观察者。

【讨论】:

  • 上述解决方案有点棘手。我只是使用委托而不是 NSNotificationCenter。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
相关资源
最近更新 更多