我是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
。
我知道,如果不进入选项卡,将不会调用viewDidLoad()
,但我不知道添加观察者的更好位置。如果进入此视图控制器,则不会收到此错误。您能告诉我是否有更好的地方可以做,还是我做错了其他事?谢谢。
EDIT这是我的全视图控制器
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
}
}
来自文档: