gpt4 book ai didi

ios - 通知中心 : BAD_ACCESS when Notification postet

转载 作者:搜寻专家 更新时间:2023-10-31 22:10:55 24 4
gpt4 key购买 nike

我有一个带有 3 个 View Controller 的应用程序,它们被推送到导航 Controller 堆栈上。

(A) -> (B) -> (C)

(A)viewWillAppear 中注册通知:

NotificationCenter.default.addObserver(self, selector: #selector(reload), name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)

(A) 在viewWillDisappear 中取消注册:

NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)

此外,(A)deinit() 中取消注册,但这从未被调用。

现在 (B) 被压入堆栈并注册/注销与 (A) 相同的事件。

现在 (C) 被插入堆栈,触发计算并弹回 (B)。一段时间后,当 (B) 出现时,计算完成并触发通知:

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)

但这会导致

Thread 1: EXC_BAD_ACCESS

我确定通知是问题所在,因为我拼错了通知名称,但没有发生崩溃。此外,(A)(B) 仍未释放,因为它们位于堆栈中。我在 Profiler 中找不到任何 Zombie。

知道可能是什么问题吗?

我正在使用 XCode 9beta6 和 Swift 4。

最佳答案

所以我只花了大约 4 个小时在我自己的代码中修复这个问题。这是我的问题:

我在选择器中指定的函数有一个默认值为 nil 的可选参数。然后我的选择器看起来就像你的一样——没有参数列表。但是,当我发出通知时,我收到了 EXC_BAD_ACCESS。

我试图用我的选择器调用与我在其上注册通知的子类相关的父函数。我不得不在子类上创建一个辅助函数并调用父类的函数。

如果您在 reload 中有一个可选参数和/或 reload 是父类中的一个函数,请尝试制作一个调用 reload 的辅助函数,并让您的选择器指向它。

关于ios - 通知中心 : BAD_ACCESS when Notification postet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812121/

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