首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNotificationCenter添加?

NSNotificationCenter添加?
EN

Stack Overflow用户
提问于 2011-04-18 00:26:44
回答 2查看 4.7K关注 0票数 1

我有两个观点,当您从一个切换到另一个时,它们会调用一个通知到即将加载以刷新内容的视图。奇怪的是,第一次加载视图时,它会调用它一次,下一次调用两次,以此类推。我的结论是,这是因为每次视图加载时,它们都会被添加。因为dealloc永远不会被调用,它仍然在那里,它将继续添加现在。

那么,在添加解决此问题之前,是否有一种方法可以检查通知是否存在?

这里是我的viewDidLoad

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ReloadGridNotification:) name:@"ReloadOHGridView" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ReloadBadgeNotification:) name:@"reloadBadge" object:nil];

我的命:

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] removeObserver:self];

谢谢!

库尔顿

编辑1:

我在UINavigationController中显示我的视图,并在它们之间切换。下面是我刷新不同视图的代码:

代码语言:javascript
复制
- (void)viewWillDisappear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadBadge" object:self];
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-18 00:53:13

每次调用addObserver时,通知中心都会向其内部结构添加一个条目。这意味着每次调用viewDidLoad时,通知中心都会再次调用您的观察者。

如果您的视图因任何原因被卸载,然后重新加载,那么viewDidLoad将再次被调用。在对象被销毁之前,您的远程观察者将不会被调用,这可能解释了为什么您的远程观察者没有工作。

您应该检查是否已经使用标志调用了addObserver,或者在卸载viewDidUnload方法中的视图时手动删除带有removeObserver的观察者。

Edit1:或者,你能在其他地方添加观察者吗,比如在App中?

票数 2
EN

Stack Overflow用户

发布于 2011-04-18 01:21:59

当内存紧张时,操作系统将转储您的视图,但首先调用viewDidUnload;当不得不重新加载它们时,它将调用viewDidLoad。然而,只有当所有对您的视图的引用都已经发布时,dealloc才会被调用,这很可能在应用程序退出之前不会发生。

因此,正如@futureelite7 7所指出的,每次重新加载视图时,您都会添加一个新的观察者,但实际上从未删除它。

您所需要做的就是确保观察者在viewDidLoad中添加,在viewDidUnload中删除,这样就不会出现多个通知问题。不需要国旗,也不需要把观察者放在其他地方。

从您的评论中可以看出,您可能已经尝试过了,但我建议您检查代码,确保您只在DidLoad中添加它们,并且总是在DidUnload中删除它们。它就像一个又一个应用程序的魅力。

编辑以添加

因为您的视图一直处于卸载状态,只有在手动执行、所有对其的引用丢失或内存紧张的情况下才会发生这种情况,因此我建议查看这三个视图,以帮助确保您正在尽您所能地保持视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5697438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档