我有3个viewControllers,我正尝试从viewController 3发送一个通知到viewController 1和2。我认为最好的方法是使用NSNotification。这是我到目前为止的内容:

在C类中-发布通知

[[NSNotificationCenter defaultCenter] postNotficationName:@"Updated "object:self];

B班

在A和B类中-首先注册以获取通知
// viewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUpdate:) name:@"Updated" object:nil];

-(void)handleUpdate:(NSNotification *)notification {
    NSLog(@"recieved");
}

到目前为止,该方法有效。但是当我在A类和B类中取消注册时:
- (void)viewWillDisappear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

不会调用handleUpdate方法。因此,显而易见的问题是当我将removeObserver's用作notification时。

我的问题是,如果到目前为止我所做的一切都是正确的,为什么删除removeObserver时它不起作用?如果不正确,我可以在哪里removeObserver's

最佳答案

您所做的一切都是对的。这就是通知的工作方式。
如果您的A,B类始终需要处理更新,则无需removeObserver。
因为您在viewDidLoad中添加了“addObserver”。这意味着您只添加一次addObserver。
正常的错误是您在“viewWillAppear”或“viewDidAppear”中添加了“addObserver”,这将在类中添加多个观察者。然后,您必须在viewDidDisappear中删除Observer。

关于ios - 我应该把NSNotification的removeObserver放在哪里,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30905896/

10-11 05:31