Как установить значение определения 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 - это протокол.