tableView(_:objectValueFor:row:) 的用途

Purpose of tableView(_:objectValueFor:row:)

The documentation for the NSTableViewDataSource protocol

This method is mandatory

如果您创建一个新的 NSTableViewDataSource,编译器会要求您提供此方法以及 numberOfRows(in tableView: NSTableView)

到目前为止,还不错。如果你提供它,它会立即为每一行调用一次......但是如果你删除它,table 似乎和没有它一样工作。在基于视图的 table 中似乎与此方法完全没有联系:在 NSTableViewDelegate 的 tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) 方法中,我 return 基于我的数据源的内容数组的新视图,如果我将一堆无意义的数据粘贴到 objectValueFor: row 中(直到并包括 returning 相同的字符串 - 我的 table 对象不是字符串)没有任何效果,因为我正在设置viewFor tableColumn: 中我的 NSTableViewCells 的值。

如果我通过直接从数据源检索相应的值来处理选择更改(以及我想对对象执行的任何操作)(例如)

func tableViewSelectionDidChange(_ notification: Notification) {
print(dataSource.allItems[tableView.selectedRow])
}

有没有理由实施这个方法?我看不到任何实际使用该对象的地方,感觉就像是基于单元格的 tables 的人工制品。

我不想因为遗漏一个必要的方法而破坏我的代码,但是由于我即将尝试使用自定义数据源进行一些奇怪而美妙的事情,我也不想让我的代码过于复杂被调用的方法,但其结果似乎完全没有意义。

如果单元格视图响应setObjectValue:,那么table视图调用该方法并传入获得的行的对象值来自 tableView(_:objectValueFor:row:).

NSTableCellView 确实响应该方法并且是一个常见的单元格视图 class。 NSTextField 也是;它实际上继承自 NSControl.

在您的情况下,您的单元格视图要么没有 objectValue 属性,要么更可能的是,您只是没有使用它。

一个常见的配置是使用 NSTableCellView 作为单元格视图,然后使用绑定将子视图绑定到通过其 objectValue 属性.

的关键路径