被发送到一个不符合KVC标准的对象" com"属性

时间:2017-07-26 23:02:06

标签: ios swift cocoa

我想在密钥 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 的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

您可以使用KVC观察来观察对象的属性,并且可以使用KVC观察来观察分配给UserDefaults的值,但是您不能使用KVC来观察值标识符包含句点的值,因为这用于描述分层键路径。

因此,异常消息是正确的,UserDefaults不符合com属性的KVC;您所询问的是当managed属性引用的对象的configuration属性由{的apple属性引用时被通知com对象的{1}}属性已被修改。

因此,您可以使用KVC通知" MyDefault"改变但不是什么时候" My.Default"变化。如果您无法更改用户默认名称,则需要观察UserDefaults NSUserDefaultsDidChangeNotification