从未在布尔属性上调用键值观察闭包

时间:2019-03-06 06:49:35

标签: swift cocoa key-value-observing nstoolbar

我有一个类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?

当我运行应用程序并选择 Customize Toolbar ... 或关闭自定义视图时,从不调用观察闭包,因此不会在控制台上打印任何内容。

为什么?

(我该如何解决?)


编辑:

Apple documentation指出:

  

您只能对从NSObject继承的类使用键值观察。

我不确定该如何理解。这是否意味着可以观察到NSObject子类上定义的任何属性,还是意味着只能跟踪属于NSObject子类的属性?

(后者将解释为什么我的代码不起作用,但是观察到普通Swift字符串的this example也不起作用。它起作用。)

1 个答案:

答案 0 :(得分:2)

  

您只能对从NSObject继承的类使用键值观察。

意味着必须只能观察NSObject子类中的对象。

不是并不意味着NSObject子类中的任何对象都是隐式可观察的。

似乎NSToolbar的此属性不符合KVO。