试图删除未注册的 UserDefaults 观察者 Swift

Trying to remove an unregistered UserDefaults observer Swift

我是 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() 将不会被调用,但我不知道添加观察者的更好位置。如果我进入这个视图控制器,我不会得到这个错误。你能告诉我是否有更好的地方可以做到这一点,或者我做错了什么吗?谢谢。

编辑 这是我的完整视图控制器

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
    }
}

来自文档:

https://developer.apple.com/documentation/foundation/notificationcenter/1413994-removeobserver

如果您的应用面向 iOS 9.0 及更高版本或 macOS 10.11 及更高版本,则无需在其 dealloc 方法中注销观察者。

如果您的应用目标版本低于 iOS 9.0,那么您可以在 viewWillAppearviewWillDisappear

上调用 register/unregister