我有一个从 NSObject
继承的类ToolbarManager
。它具有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?
当我运行应用程序并选择自定义工具栏... 或关闭自定义视图时,观察闭合永远不会被调用,因此没有打印到控制台上。
为什么?
(我该如何解决?)
编辑:
Apple文档指出:
您只能使用从
NSObject
继承的类使用键值观察。
我不确定如何理解这一点。这是否意味着可以观察到NSObject
子类定义的任何属性,还是意味着只能跟踪NSObject
子类的属性?
(后者会解释为什么我的代码不起作用,但是此示例观察到一个普通的swift字符串也无法正常工作。Div>
您只能使用从
NSObject
继承的类使用键值观察。
意味着只能观察到NSObject
的子类中的对象。
它确实不是表示NSObject
子类中的任何对象都是隐式观察的。
看来NSToolbar
的属性不符合KVO。