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

问题描述 投票:0回答:1

我是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
    }
}
ios swift observers userdefaults
1个回答
0
投票

来自文档:

© www.soinside.com 2019 - 2024. All rights reserved.