我应该把NSNotification的removeObserver放在哪里

杰西卡(Jessica)

我有3个viewControllers,我正尝试从viewController3到viewController1和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'snotification

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

郑Cheng

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

闭环-我应该放在哪里?

来自分类Dev

.tolowerCase()我应该放在哪里?

来自分类Dev

我应该把 .Appimages 文件放在哪里?

来自分类Dev

我应该把我自己写的Python包放在哪里?

来自分类Dev

我应该把我自己编译的软件放在哪里?

来自分类Dev

我应该把我自己编译的软件放在哪里?

来自分类Dev

我应该把我的 lang 属性放在哪里?

来自分类Dev

我的原始SQL在Symfony 2中应该放在哪里?

来自分类Dev

我应该把由systemd单元执行的脚本放在哪里?

来自分类Dev

我应该将Junit @Category的接口类放在哪里?

来自分类Dev

我应该将Ensembles uniqueIdentifier放在哪里?

来自分类Dev

我应该将非模型课程放在哪里?

来自分类Dev

我应该将全局宏放在哪里?

来自分类Dev

我应该将游戏循环放在哪里?

来自分类Dev

我应该将用户页面放在哪里?

来自分类Dev

我的bash脚本应该放在哪里

来自分类Dev

我应该将默认值放在哪里?

来自分类Dev

我应该将Junit @Category的接口类放在哪里?

来自分类Dev

我应该将ssh私钥放在哪里?

来自分类Dev

我的util shell脚本应该放在哪里

来自分类Dev

Angular JS-我的代码应该放在哪里?

来自分类Dev

重击/ Awk。我应该将IF声明放在哪里?

来自分类Dev

我应该把由systemd单元执行的脚本放在哪里?

来自分类Dev

我应该把源代码放在哪里?

来自分类Dev

Android Studio:我应该把弦放在哪里?

来自分类Dev

我应该把 Apache 头文件放在哪里?

来自分类Dev

我应该把 JDBC 驱动程序放在哪里?

来自分类Dev

我应该把扩展文件夹放在哪里

来自分类Dev

我应该把 do while bool 放在哪里