我有一个继承自ToolbarManager
的类NSObject
。它有一个toolbar
属性定义如下:
@objc dynamic let toolbar: NSToolbar
在我的类的初始化程序中,我调用以下代码:
init(toolbar: NSToolbar) {
self.toolbar = toolbar
toolbar.allowsUserCustomization = true
observation = observe(\.toolbar.customizationPaletteIsRunning, options: [.old, .new]) {
(_, change) in
print("was running: \(change.oldValue)")
print("is running: \(change.newValue)")
}
}
其中observation
是另一个定义如下的属性:
var observation: NSKeyValueObservation?
当我运行应用程序并选择自定义工具栏...或关闭自定义视图时,永远不会调用观察闭包,因此不会向控制台打印任何内容。
(我该如何解决这个问题?)
您只能对从
NSObject
继承的类使用键值观察。
我不知道怎么理解这个。这是否意味着可以观察到在NSObject
子类上定义的任何属性,或者它是否意味着只能跟踪NSObject
子类的属性?
(后者将解释为什么我的代码不起作用,但后来观察普通Swift字符串的this example也不起作用。它确实有效。)
您只能对从
NSObject
继承的类使用键值观察。
意味着只需要观察NSObject
子类中的对象。
这并不意味着NSObject
的子类中的任何对象都是隐式可观察的。
似乎NSToolbar
的这个属性不符合KVO。