我正在阅读Big Nerd Ranch的Cocoa Programming for OS X
一书,而我陷入了第9章-使用NSArrayController。这本书不是最新的,所以我必须在线搜索一些内容才能使它生效。
我一直坚持将TableViewCell绑定到对象的键上。
所以我有一个对象:
import Foundation
class Employee: NSObject {
var name: String? = "New Employee"
var raise: Float = 0.05
}
这已绑定到NSArrayController内容数组。
使用Employee
对象的Document控制器是:
import Cocoa
class Document: NSDocument {
@objc dynamic var employees: [Employee] = []
override init() {
super.init()
// Add your subclass-specific initialization here.
}
override class var autosavesInPlace: Bool {
return true
}
override var windowNibName: NSNib.Name? {
return NSNib.Name("Document")
}
}
问题是,当我为Table Cell视图设置绑定时,如下所示:
该程序仍在加载,但是当我单击Add Emplyee
时,该程序崩溃并显示错误
Xcode版本:10.1
迅捷版:4
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
,控制台中没有关于该错误的其他信息。
答案 0 :(得分:1)
可可绑定基于键值观察,必须将属性标记为dynamic
,并且在Swift 4中已更改Objective-C推断,您必须向每个受影响的属性添加@objc
属性
class Employee: NSObject {
@objc dynamic var name: String? = "New Employee"
@objc dynamic var raise: Float = 0.05
}