UserDefaults和KVC:默认值更改时不会触发observeValueForKeyPath

时间:2017-11-20 13:33:24

标签: ios swift

我正在尝试观察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设置应用程序更改设置时,永远不会触发此方法。我尝试放置一个断点,调试器永远不会介入此方法,并且永远不会执行打印功能。我做错了什么?

0 个答案:

没有答案