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
}