Как установить значение определения IBOutlet в суперклассе из подкласса в Swift?

Я работаю над приложением, которое имеет ряд похожих, но не идентичных представлений, каждое из которых содержит NSTableView.

У меня есть базовый класс контроллера представления, который реализует методы, общие для всех моих контроллеров представления (AppViewController). Он наследуется от NSViewController.

У меня есть другой базовый класс контроллера представления (ListViewController), который наследуется от AppViewController. Он соответствует NSWindowDelegate, NSTableViewDataSource и NSTableViewDelegate и реализует все методы, общие для моих представлений списка.

ListViewController определяет IBOutlet для табличного представления.

@IBOutlet weak var tableView: NSTableView!

Эта розетка не была подключена к раскадровке.

Я работаю над подклассом ListViewController, который реализует детали для одного случая.

Подкласс определяет свой собственный IBOutlet для фактического табличного представления. Этот IBOutlet подключен к раскадровке.

Метод viewDidLoad() этого класса пытается использовать это значение для установки IBOutlet, определенного в ListViewController.

class Clv: ListViewController<CustomerMaster>
{
  @IBOutlet weak var customersTableView: NSTableView!

  override func viewDidLoad()
  {
    tableView = customersTableView
    super.viewDidLoad()
  }
}

Это компилируется просто отлично, но не работает во время выполнения с:

017-08-29 08: 16: 44.602374-0700 Инвентаризация [6910:156206640] Неизвестный класс _TtC9Inventory3Clv в файле Interface Builder по пути /.../DerivedData/Inventory-begbsguxpczpiebmygowechkthaw/Build/Products/Debug/Invent/ Ресурсы / Base.lproj / Main.storyboardc / CustomerListWindowController.nib.

2017-08-29 08: 16: 44.803674-0700 Инвентарь [6910:156206640] Не удалось подключить выход (CustomersTableView) из (NSViewController) к (NSTableView): отсутствует сеттер или переменная экземпляра

Я подозреваю, что мой подход довольно наивен, но не смог найти другой подход с помощью различных поисков.

Еще одна странность, которую я заметил, заключается в том, что когда я пытаюсь указать класс для контроллера представления на раскадровке, мой класс Clv отсутствует в списке. Это, вероятно, связано с ошибкой подключения.

ТИА.

Дополнительная информация:

class AppViewController: NSViewController { ... }

class ListViewController<Model: RestModel>: AppViewController,
                                            NSWindowDelegate,
                                            NSTableViewDataSource,
                                            NSTableViewDelegate     { ... }

RestModel - это протокол.

0 ответов

Другие вопросы по тегам