macos - Swift 绑定(bind)到 Objective-C bool 值

标签 macos cocoa swift

我有一个按钮 shuffleButton,您可以单击它来切换随机播放。

因为我喜欢在应用程序关闭时存储该属性,所以我绑定(bind)了一个自定义属性 selected,它是一个 bool 值,从 shuffleButton 到用户默认值.

shuffleButton.bind("selected", toObject: NSUserDefaultsController.sharedUserDefaultsController(), withKeyPath: "values.shuffle", options: nil)

虽然这只适用于一种方式。如果我设置用户默认属性,按钮会更新。

NSUserDefaults.standardUserDefaults().setValue(true, forKey: "shuffle")

// test it out
println(NSUserDefaults.standardUserDefaults().valueForKey("shuffle"))
=> 1
println(shuffleButton.selected)
=> true

但是如果我更新按钮上的 selected 属性,用户默认值不会更新。

shuffleButton.selected = true

// test it out
println(NSUserDefaults.standardUserDefaults().valueForKey("shuffle"))
=> 0
println(shuffleButton.selected)
=> true

知道为什么吗? Swift Bool 值是否未正确桥接到 Objective-C?

最佳答案

尝试使用 setBool 设置 bool 值,因为 bool 不是对象,这就是为什么 iOS 提供此方法来保存 bool 值。 你不需要桥接 shuffleButton.selected 将接受 swift bool 值,一切都用 swift 语言重写(检查类引用)下面的示例工作正常

    let defs = NSUserDefaults.standardUserDefaults();
    var k = true;
    defs.setBool(k, forKey: "bool");
    defs.setDouble(2.5, forKey: "foo");
    defs.synchronize();
    var ud = defs.doubleForKey("foo");
       var bo = defs.boolForKey("bool");
    println("default = \(ud) bool =\(bo)");
    shuffleButton.selected = bo;

关于macos - Swift 绑定(bind)到 Objective-C bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24857361/

相关文章:

java - 从命令选项卡应用程序切换器隐藏 Java 应用程序并停靠在 OSX 中

ios - 无法使用 SWIFT 更新数据库 FMDB 中的字段

ios - Swift to php 在本地服务器上不能在我的设备上运行?

xcode - 如何检查是否需要接受 Xcode 许可

swift - 右键单击 NSTableView 行时如何添加(显示)上下文菜单?

objective-c - 如何在另一台Mac上运行未签名的cocoa应用程序构建?

cocoa - 重置 NSView 中的图像

ios - 如何在 iOS App 中集成谷歌钱包?

c++ - 有没有办法监视 C++/MacOS 中的堆使用情况?

cocoa - 当关闭顶层窗口时,如何让焦点转到下一级窗口?