Новый пользователь StackOverflow здесь (первая публикация, долгое время скрывавшаяся без учетной записи).Прежде чем я начну, вот некоторые ранее отвеченные вопросы, которые я нашел полезными, но не полностью решил мою проблему:
Как безопасно удалить Observer (Swift)
Правильное место для вызова .removeObserver для NSNotificationCenter = Swift deinit ()?
Из них я создал контроллер BaseView, с помощью которого можно управлять поведением моего приложения при различных обстоятельствах (например,вызов API для проверки обновлений при возврате приложения на передний план)
class BaseViewController : UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(applicationWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
}
@objc func applicationWillEnterForeground() {
}
@objc func applicationDidEnterBackground() {
}
deinit {
print("WORKING - deinit BaseViewController")
NotificationCenter.default.removeObserver(self, name: UIApplication.willEnterForegroundNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: UIApplication.didEnterBackgroundNotification, object: nil)
}
}
Однако моя проблема заключается в том, что мне необходимо использовать других наблюдателей NotificationCenter для динамического управления панелью навигации (прогресс), котораязависит от того, где в приложении находится пользователь (и что они там делают, в отрыве от других областей).
Мой вопрос: "Является ли правильное место для вызова .removeObserver всегда deinit ()? " или, если нет, есть ли какие-нибудь ключевые места, где следует рассмотреть возможность добавления вызовов .removeObserver?
Если это помогает, панель навигации для каждого раздела приложения присоединяется к MainPagerVC
(UIPageViewController
), который используется повторно и включается и выключается с помощью LGSideMenuController