钥匙值观察的关闭从未在布尔物业上召集



我有一个从 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。

相关内容

  • 没有找到相关文章

最新更新