gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:17:53 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com