Swift 在AppKit窗口中刷新KVO跟踪UI元素

Swift 在AppKit窗口中刷新KVO跟踪UI元素,swift,interface-builder,key-value-observing,appkit,nsviewcontroller,Swift,Interface Builder,Key Value Observing,Appkit,Nsviewcontroller,我在刷新AppKit(NS)窗口中的文本编辑字段时遇到问题。我从UIKit到AppKit的长期经验中走出来,所以我仍然会撞上一些护栏 我有一个基本的设置类,就像这样(所有这些都是pcode。我可以指出,但对于一个so问题来说有点冗长): 现在,如果我使用IB绑定将B的一个实例及其liveDataObjectAccessor计算属性与NSTextField关联起来,效果会很好。对文本字段的更改将反映在数据中 如果我有一个调用a.RESET()方法的“RESET”按钮,我希望文本字段反映0(如果用户

我在刷新AppKit(NS)窗口中的文本编辑字段时遇到问题。我从UIKit到AppKit的长期经验中走出来,所以我仍然会撞上一些护栏

我有一个基本的设置类,就像这样(所有这些都是pcode。我可以指出,但对于一个so问题来说有点冗长):

现在,如果我使用IB绑定将
B
的一个实例及其
liveDataObjectAccessor
计算属性与
NSTextField
关联起来,效果会很好。对文本字段的更改将反映在数据中

如果我有一个调用
a.RESET()
方法的“RESET”按钮,我希望文本字段反映0(如果用户更改了它,就说他们输入了“1”)

然而,我所经历的是,
A.liveDataObject
被设置为0,但是文本字段继续显示“1”


如何确保在更改基础值时更新文本字段?

我认为可能需要重写B中的reset()方法,并对每个可观察值执行liveDataObjectAccessor=liveDataObject之类的操作。很糟糕,但我敢打赌它一定行得通。我更希望有一些东西能够迫使UI元素刷新它们的绑定。请注意,UI对象与代码没有链接。这一切都是在IB中完成的。不……那不行。“好吧,回到旧的绘图板上。”-威尔·E·科约特。我刚才看到了。看起来我必须基本上消除绑定,并实际强制更新文本。我想我可能需要重写B中的reset()方法,并对每个可观察值执行liveDataObjectAccessor=liveDataObject之类的操作。很糟糕,但我敢打赌它一定行得通。我更希望有一些东西能够迫使UI元素刷新它们的绑定。请注意,UI对象与代码没有链接。这一切都是在IB中完成的。不……那不行。“好吧,回到旧的绘图板上。”-威尔·E·科约特。我刚才看到了。看起来我必须基本上消除绑定,并强制更新文本。
class A: NSObject {
    var liveDataObject: Int = 0
    func reset() { liveDataObject = 0 }
}

class B: A {
    @objc dynamic var liveDataObjectAccessor: Int {
        get { return liveDataObject }
        set { liveDataObject = newValue }
    }
}