【发布时间】:2017-07-26 23:02:06
【问题描述】:
我想观察存储在 UserDefaults.standard 中的值在 key 下:com.apple.configuration.managed,所以我这样做了:
UserDefaults.standard.addObserver(self, forKeyPath: "com.apple.configuration.managed", options: [.new, .old], context: nil)
然后我实现了这个:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
}
当我运行应用程序时,observeValue... 在默认值更改时永远不会被调用,而是 Xcode 崩溃并出现此错误:
*** 由于未捕获的异常而终止应用程序 'NSUnknownKeyException',原因:'[ 添加观察者: forKeyPath:@"com.apple.configuration.managed" 选项:1 上下文:0x0] 被发送到“com”不符合 KVC 的对象 属性。'
在 UserDefaults.standard 中观察 com.apple.configuration.managed 的正确方法是什么?
【问题讨论】:
-
这不是 Detect changes on NSUserDefaults 的副本。这里的问题是关键路径中的点,该问题没有解决。
-
我猜这个stackoverflow.com/a/14172860/728246 可能会让我的问题看起来像重复,我只是没有意识到“。”是导致此错误的原因...
-
问题的根本原因是一样的,但是
NSUserDefaults是 KVO 兼容的,而NSDictionary不是,所以我认为没有必要关闭作为重复项。