我想在密钥 com.apple.configuration.managed 下观察存储在UserDefaults.standard中的值,所以我这样做了:
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',原因:' [ 的addObserver: forKeyPath:@" com.apple.configuration.managed"选项:1个上下文:0x0] 被发送到一个不符合KVC标准的对象" com" 。属性'
在UserDefaults.standard中观察 com.apple.configuration.managed 的正确方法是什么?
答案 0 :(得分:4)
您可以使用KVC观察来观察对象的属性,并且可以使用KVC观察来观察分配给UserDefaults
的值,但是您不能使用KVC来观察值标识符包含句点的值,因为这用于描述分层键路径。
因此,异常消息是正确的,UserDefaults
不符合com
属性的KVC;您所询问的是当managed
属性引用的对象的configuration
属性由{的apple
属性引用时被通知com
对象的{1}}属性已被修改。
因此,您可以使用KVC通知" MyDefault"改变但不是什么时候" My.Default"变化。如果您无法更改用户默认名称,则需要观察UserDefaults
NSUserDefaultsDidChangeNotification