У меня есть приложение с 3 контроллерами просмотра, которые помещаются в стек навигационного контроллера.
(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 и Swift 4.