我在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"
这是故事板:
有没有人在Xcode 6 Beta 5上设置绑定有什么成功? 任何帮助表示赞赏!
谢谢!
修改 正如建议我尝试添加"动态"要启用绑定的属性的关键字,但它会出现相同的错误并且无法正常工作 我也试过继承" Name"来自NSObject的类,以便使用Cocoa的旧Objective-C支持,但绑定仍然无法正常工作!
答案 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
。我不知道如何摆脱惊叹号/警告,但它确实有效。
答案 2 :(得分:1)
您使用的是基于NSCell或NSView的表吗?如何设置绑定对于这些不同。您正在做的事情看起来对于基于NSCell的表是正确的。
当我今天设置NSTableView时,它是一个基于NSView的表,所以我不得不选择TextField并绑定到" Table Cell View"使用模型关键路径" objectValue.name"
请参阅“适用于Mac的表视图编程指南:使用Cocoa绑定填充表视图”文档