Key-Value-Observing闭包永远不会调用Boolean属性

问题描述 投票:0回答:1

我有一个继承自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?

当我运行应用程序并选择自定义工具栏...或关闭自定义视图时,永远不会调用观察闭包,因此不会向控制台打印任何内容。

Why?

(我该如何解决这个问题?)


Edit:

Apple documentation说:

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

我不知道怎么理解这个。这是否意味着可以观察到在NSObject子类上定义的任何属性,或者它是否意味着只能跟踪NSObject子类的属性?

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

swift cocoa key-value-observing nstoolbar
1个回答
2
投票

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

意味着只需要观察NSObject子类中的对象。

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

似乎NSToolbar的这个属性不符合KVO。

© www.soinside.com 2019 - 2024. All rights reserved.