【发布时间】:2019-03-06 06:49:35
【问题描述】:
我有一个继承自 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?
当我运行应用程序并选择 自定义工具栏... 或关闭自定义视图时,观察闭包永远不会被调用,因此控制台不会打印任何内容。
为什么?
(我该如何解决这个问题?)
编辑:
您只能对继承自
NSObject的类使用键值观察。
我不确定如何理解这一点。这是否意味着可以观察到定义在 NSObject 子类上的任何属性,还是意味着只能跟踪属于 NSObject 子类的属性?
(后者会解释为什么我的代码不起作用,但是观察到普通 Swift 字符串的 this example 也不起作用。它确实起作用。)
【问题讨论】:
标签: swift cocoa key-value-observing nstoolbar