我有一个像这样注册为观察者的 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/