12

我正在 OSX 上使用 Swift 中的绑定做一个简单的测试程序。拥有一个 NSTableView、NSArrayController 和一个模型类,我尝试将它们连接在一起,但没有成功!构建编译但立即给出此错误: 线程 1:EXC_BAD_ACCESS(code=1, address = 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.
    }
                                
}

}

我已经将数组控制器设置为使用我的类“Name”并添加了键“firstName”和“lastName”

这是故事板:

故事板 绑定1 绑定2

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

谢谢!

编辑: 正如建议的那样,我尝试将“动态”关键字添加到属性中以启用绑定,但它给出了相同的错误并且不起作用。
我还尝试从 NSObject 继承“Name”类,以便使用 Cocoa 的旧 Objective-C 支持,但绑定仍然不起作用!

4

3 回答 3

17

Beta 5 要求您显式设置属性dynamic,以便 KVO/bindings 工作:

dynamic var firstName = "Brook"

有关详细信息,请参阅发行说明的动态声明修饰符部分。

dynamic 关键字使 KVO、代理和其他高级 Cocoa 功能能够可靠地与 Swift 声明一起工作。

于 2014-08-13T21:32:48.087 回答
3

您必须选择Table View Cell并将其值Table Cell View与适当的 objectValue 绑定。我不知道如何摆脱感叹号/警告,但它有效。

在此处输入图像描述

于 2014-12-28T16:57:17.980 回答
2

您使用的是基于 NSCell 或 NSView 的表格吗?对于这些,您设置绑定的方式是不同的。对于基于 NSCell 的表,您所做的看起来是正确的。

当我今天设置一个 NSTableView 时,它是一个基于 NSView 的表格,所以我必须选择 TextField 并使用模型键路径“objectValue.name”绑定到“表格单元格视图”

请参阅 Mac 的 Table View Programming Guide:Populating a Table View Using Cocoa Bindings 文档

于 2014-09-06T05:49:36.387 回答