绑定值更改时 NSButton 标题不更新

NSButton Title not updating when bound value changes

我想做的是绑定一个 NSButton 的标题,这样我就可以通过更改它绑定到的变量的值来更改按钮的标题。

我已经创建了默认的 swift cocoa 应用程序项目并向 window 添加了两个按钮。按钮 A 和按钮 B。

对于 ButtonB 的值绑定,我已将标题绑定到 App Delegate,并将模型键路径设置为 self.buttonBTitleBinding。

我已经将 ButtonA 的动作设置为应用委托函数 buttonA。

我已将应用程序委托定义如下:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate
{
    @IBOutlet weak var window: NSWindow!

    var buttonBTitleBinding = "Hello"
    {
        didSet
        {
            NSLog( "buttonBTitleBinding: %@", buttonBTitleBinding )
        }
    }


    @IBAction func buttonA( sender: NSButton )
    {
        if self.buttonBTitleBinding == "Hello"
        {
            self.buttonBTitleBinding = "Bye"
        }
        else
        {
            self.buttonBTitleBinding = "Hello"
        }
    }


    func applicationDidFinishLaunching(aNotification: NSNotification)
    {
        // Insert code here to initialize your application
    }



    func applicationWillTerminate(aNotification: NSNotification)
    {
        // Insert code here to tear down your application
    }
}

当我启动应用程序时,按钮 B 的标题是 "Hello",所以我知道它绑定到正确的变量。

当我按下按钮 A 时,我确实在控制台中看到:

buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello
buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello
buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello
buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello

我知道正在调用 buttonBTitleBinding 的 didSet 并且它的值正在改变。

但是,按钮的标题不会更新。

有没有办法让它工作?

要使绑定生效,属性 必须以 KVO 方式进行更改。我是 Swift 的新手,但我发现了这个:Is key-value observation (KVO) available in Swift?。简而言之:将 dynamic modifier 添加到 属性。