Я новичок в программировании на Swift и iOS, так что извините за недостаток знаний ...
У меня есть контроллер TabBar, и один из контроллеров представления вкладок регистрирует наблюдателя в его viewDidLoad()
метод, подобный этому:
UserDefaults.standard.addObserver(self, forKeyPath: "interests", options: .new, context: nil)
Я пытаюсь удалить наблюдателя в методе deinit()
, например:
UserDefaults.standard.removeObserver(self, forKeyPath: "interests")
Однако, если я раньше не заходил на эту вкладку, я получаю эту ошибку: Cannot remove an observer for the key path "interests" because it is not registered as an observer
.
Я понимаю, что если я не go во вкладку viewDidLoad()
не будет вызван, но я не знаю лучшего места для добавления наблюдателя. Я не получаю эту ошибку, если я вошел в этот контроллер представления. Можете ли вы сказать мне, если есть лучшее место для этого или я делаю что-то еще неправильно? Спасибо.
РЕДАКТИРОВАТЬ Вот мой полный просмотр контроллера
class InterestsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UserDefaults.standard.addObserver(self, forKeyPath: "interests", options: .new, context: nil)
}
deinit {
UserDefaults.standard.removeObserver(self, forKeyPath: "interests")
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
// updating the UI
}
}