绑定到表视图单元格时为EXC_BAD_INSTRUCTION

时间:2018-12-31 17:17:12

标签: swift xcode cocoa swift4

我正在阅读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")
    }
}

一切正常,结果如下所示: enter image description here

问题是,当我为Table Cell视图设置绑定时,如下所示: enter image description here

该程序仍在加载,但是当我单击Add Emplyee时,该程序崩溃并显示错误

Xcode版本:10.1 迅捷版:4 Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0),控制台中没有关于该错误的其他信息。

1 个答案:

答案 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
}