Swift Bindings无法使用Xcode 6 Beta 5

时间:2014-08-12 16:27:23

标签: swift cocoa-bindings xcode6 osx-yosemite osx-yosemite-beta

我在OSX上使用Swift中的绑定做一个简单的测试程序。 有一个NSTableView,NSArrayController和一个模型类,我试图挂钩它们 在一起,但没有成功!构建编译但立即给出此错误: 主题1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)

代码如下:
模特课:

import Foundation

class Name {
   var firstName = "Brook"
   var lastName = "Brooklyn"
}

查看控制器:

import Cocoa

class ViewController: NSViewController {

    dynamic var names = [Name]()  // serves as the content for Array-Controller

    override func viewDidLoad() {
        super.viewDidLoad()

        // populate array
        var name1 = Name()
        var name2 = Name()

        names.append(name1)
        names.append(name2)

}

override var representedObject: AnyObject? {
    didSet {
    // Update the view, if already loaded.
    }

}

}

我已经设置了阵列控制器来使用我的班级"姓名"并添加了键" firstName"和" lastName"

这是故事板:

Storyboard Bindings1 Bindings2

有没有人在Xcode 6 Beta 5上设置绑定有什么成功? 任何帮助表示赞赏!

谢谢!

修改 正如建议我尝试添加"动态"要启用绑定的属性的关键字,但它会出现相同的错误并且无法正常工作 我也试过继承" Name"来自NSObject的类,以便使用Cocoa的旧Objective-C支持,但绑定仍然无法正常工作!

3 个答案:

答案 0 :(得分:16)

Beta 5要求您明确将属性设置为dynamic,以便KVO /绑定能够正常工作:

dynamic var firstName = "Brook"

有关详细信息,请参阅release notes动态声明修饰符部分。

  

dynamic关键字使KVO,代理和其他高级Cocoa功能可以使用Swift声明可靠地工作。

答案 1 :(得分:2)

您必须选择Table View Cell并使用相应的objectValue将其值绑定到Table Cell View。我不知道如何摆脱惊叹号/警告,但它确实有效。

enter image description here

答案 2 :(得分:1)

您使用的是基于NSCell或NSView的表吗?如何设置绑定对于这些不同。您正在做的事情看起来对于基于NSCell的表是正确的。

当我今天设置NSTableView时,它是一个基于NSView的表,所以我不得不选择TextField并绑定到" Table Cell View"使用模型关键路径" objectValue.name"

请参阅“适用于Mac的表视图编程指南:使用Cocoa绑定填充表视图”文档