ios - 添加和删​​除观察者问题

标签 ios nsnotificationcenter ecslidingviewcontroller

我有一个像这样注册为观察者的 View Controller “A”,

-(void)viewWillAppear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"localActionTaken" object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveLocalActionNotification:) name:@"localActionTaken" object:nil];
}

我也在 dealloc 方法中删除了观察者。

用户从 View Controller “A”转到 View Controller “B”,其中发布了“localActionTaken”通知。

在此之前一切正常

现在我有另一个 View Controller “C”,用户从中被推送到 View Controller “A”,然后从“A”推送到“B”。 但是问题出在这个“C”->“A”->“B”,如果通知在“B”中触发,那么观察者“A”会被通知两次!

如果我遗漏了什么,请告诉我。

注意:我使用的是 ECSlidingview,“A”和“C”是顶 View Controller 。

----------------更新----------------

我必须根据对堆栈中特定 View Controller 的检查将 removeObserver 移动到 viewWillDisappear。

最佳答案

在 A 和 B 之间导航时,观察到的通知数量是否会累积(增长超过两倍)。当从 A <-> B 移动时,viewWillAppear 将继续被调用,但 dealloc 还不会被调用。因此,viewWillAppear 中的removeObserver 可能存在问题,导致在A 上添加多个观察者,从而导致观察到多个通知。您包含的代码示例似乎适用于在弹出回 C 时添加、删除和释放,但我还没有尝试过“ECSlidingview”

关于ios - 添加和删​​除观察者问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28540359/

相关文章:

iOS 音频/声音不会在后台模式处于事件状态时在后台播放

ios - 当我的应用程序在后台运行时,是否可以在通知上设置 PresentationsOptions?

ios - ECSlidingViewController 滑回主视图 Controller 时的回调?

iphone - viewWillAppear 时 ECSlidingViewController 错误(对象不能为 nil)

iphone - 我是否需要从 NSNotificationCenter 中删除观察者一次,或者添加多次?

ios - 在 TopViewController 之上显示 ECSlidingViewController

ios - swift - Firebase 数据库快照检索。

ios - Swift - 任意数组到字符串数组

ios - 如何在旧版本中创建Objective-C项目

Swift 混淆了这段代码在做什么