EXC_BAD_INSTRUCTION при привязке к ячейке табличного представления - PullRequest
0 голосов
/ 31 декабря 2018

Я перебираю Cocoa Programming for OS X книгу Ранчо Большого Ботаника, и я застрял в Главе 9 - работа с NSArrayController.Эта книга не устарела, поэтому некоторые вещи мне пришлось искать в Интернете, чтобы она работала.

Я застрял при привязке TableViewCell к ключу моего объекта.

Итак, у меня естьobject:

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")
    }
}

Все работаетхорошо, и результат выглядит так: enter image description here

Проблема в том, что, когда я устанавливаю привязку для представления ячейки таблицы, вот так: enter image description here

Программа все еще загружается, но когда я нажимаю Add Emplyee, программа вылетает с ошибкой

Версия Xcode: 10.1 Версия Swift: 4 Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) без другой информации вконсоль относительно ошибки.

1 Ответ

0 голосов
/ 31 декабря 2018

Привязки какао основаны на наблюдении значения ключа, свойства должны быть помечены как dynamic, и в Swift 4 был изменен вывод Objective-C, необходимо добавить атрибут @objc к каждому затронутому свойству.

class Employee: NSObject {
   @objc dynamic var name: String? = "New Employee" 
   @objc dynamic var raise: Float = 0.05
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...