我有与被导航控制器压栈3个viewcontrollers应用程式BAD_ACCESS。通知中心:当通知postet
(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)
但是这导致的
主题1:EXC_BAD_ACCESS
我敢肯定,通知是问题,因为我拼写错了通知名称,然后没有发生崩溃。由于生活在堆栈上,所以(A)
和(B)
仍未被释放。我无法在Profiler中找到任何僵尸。
任何想法可能是什么问题?
我使用的XCode 9beta6和斯威夫特4.
请编辑您的问题,以显示堆栈跟踪。 – Paulw11
没有堆栈跟踪。我只将EXC_BAD_ACCESS作为红线。 – netshark1000
设置异常断点以获取受影响的行,实际的异常原因和堆栈跟踪。选择器的签名很可能是错误的。 – vadian