如何在Swift的子类中设置超类中IBOutlet定义的值?

时间:2017-08-29 15:52:48

标签: cocoa swift3 nstableview

我正在开发一个具有许多相似但不相同的视图的应用程序,每个视图都包含一个NSTableView。

我有一个基本视图控制器类,它实现了我所有视图控制器(AppViewController)的通用方法。它继承自NSViewController。

我有另一个继承自AppViewController的视图控制器基类(ListViewController)。它符合NSWindowDelegate,NSTableViewDataSource和NSTableViewDelegate,并实现了我的列表视图中常见的所有方法。

ListViewController为表视图定义了一个IBOutlet。

@IBOutlet weak var tableView: NSTableView!

这个插座尚未连接到故事板。

我正在研究一个ListViewController的子类,它实现了一个案例的细节。

子类为实际的表视图定义了自己的IBOutlet。此IBOutlet 连接到故事板。

此类的viewDidLoad()方法尝试使用该值设置ListViewController中定义的IBOutlet。

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在路径/.../ DerivedData / Inventory-begbsguxpczpiebmygowechkthaw / Build / Products / Debug / Inventory.app / Contents / Resources / Base.lproj / Main.storyboardc / CustomerListWindowController.nib。

     

2017-08-29 08:16: 44.803674-0700库存[6910:156206640]失败   从(NSViewController)连接到(clientsTableView)插座   (NSTableView):缺少setter或实例变量

我怀疑我的方法相当幼稚,但无法通过各种搜索找到另一种方法。

我注意到的另一个奇怪之处在于,当我尝试在故事板上为视图控制器指定类时,我的Clv类不在列表中。这可能与连接错误失败有关。

TIA。

其他信息:

class AppViewController: NSViewController { ... }

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

RestModel是一种协议。

0 个答案:

没有答案