EXC_BAD_INSTRUCTION 绑定到 Table 查看单元格时
EXC_BAD_INSTRUCTION when binding to Table View Cell
我正在阅读 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
对象的文档控制器是:
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 单元格视图设置绑定时,如下所示:
程序仍在加载,但是当我单击 Add Emplyee
时,程序崩溃并出现错误
Xcode版本:10.1
Swift版本:4
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
控制台中没有关于该错误的其他信息。
Cocoa Bindings是基于Key Value Observing,属性必须标记为dynamic
and Objective-C inference has been changed in Swift 4,你必须将 @objc
属性添加到每个受影响的 属性.
class Employee: NSObject {
@objc dynamic var name: String? = "New Employee"
@objc dynamic var raise: Float = 0.05
}
我正在阅读 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
对象的文档控制器是:
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 单元格视图设置绑定时,如下所示:
程序仍在加载,但是当我单击 Add Emplyee
时,程序崩溃并出现错误
Xcode版本:10.1
Swift版本:4
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
控制台中没有关于该错误的其他信息。
Cocoa Bindings是基于Key Value Observing,属性必须标记为dynamic
and Objective-C inference has been changed in Swift 4,你必须将 @objc
属性添加到每个受影响的 属性.
class Employee: NSObject {
@objc dynamic var name: String? = "New Employee"
@objc dynamic var raise: Float = 0.05
}