我正在尝试观察iOS应用中对 UserDefaults 的任何更改。由于我想要监控甚至在应用程序之外发生的所有更改(因为它们已从iOS设置应用程序更改),据我所知,我无法使用 UserDefaults.didChangeNotification :
当在当前流程之外进行更改或无处不在的默认值发生更改时,不会发布此通知。您可以使用键值观察来注册观察者以获取感兴趣的特定键,以便获得所有更新的通知,无论是在当前进程内部还是外部进行更改。
所以我在用户默认值中为每个键值对添加一个观察者:
for key in self.dictionary.keys { // The dictionary contains all the
// key-values that were registered
userDefaults.addObserver(observer, forKeyPath: key, options: .new, context: nil)
}
观察者是一个永远不会被释放的单例对象,它实现了这个方法:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
print("Observe value for key path: \(keyPath ?? "Nil")")
<do stuff>
}
但问题是,当我从iOS设置应用程序更改设置时,永远不会触发此方法。我尝试放置一个断点,调试器永远不会介入此方法,并且永远不会执行打印功能。我做错了什么?