在NSTableViewDataSource中,概述说这tableView:objectValueForTableColumn:row:是"必需的".
紧挨着这一点,它表示tableView:setObjectValue:forTableColumn:row:"仅基于单元格的表"是必需的,这表明编写此文档的人知道基于视图的表,这tableView:objectValueForTableColumn:row:是基于视图的表所必需的.
方法tableView:objectValueForTableColumn:row:本身的文档说:
注意:除非您的应用程序使用Cocoa绑定向表视图提供数据,否则此方法是必需的.
但与其他方法不同的是,没有提到基于视图的表是不必要的.
然而,如果需要,我无法弄清楚它的用途.如果是这样,那个和-tableView:viewForTableColumn:row:它之间的关系是什么,它还需要一个表,一列和一行,并返回要在那里显示的东西?
在一些简短的测试中,看起来NSTableView将-tableView:objectValueForTableColumn:row:在定义时使用,如果没有,它将使用-tableView:viewForTableColumn:row:.如果它们都被定义,它会同时调用它们,但只使用前者进行显示.
如果我正在编写基于视图的NSTableView,是否有任何理由来实现此方法?
该NSTableView的-noteNumberOfRowsChanged文档说:
注意:使用基于NSView的表视图时,应避免使用此方法。该表将在数据源中查询新的行数,并根据需要使用动画在表的末尾正确插入(或删除)行。
不幸的是,它没有说我应该使用什么!
我已将我的应用程序从基于NSCell的表更改为基于NSView的表,以便使用(略微)更复杂的自定义单元格(据说这些单元格更易于设计/绘制为NSViews),但是我看到了显着的性能问题,即使在小桌子上也是如此。
我已经在调用-reloadDataForRowIndexes:columnIndexes:,从经验上讲,这不足以让它重新查询-numberOfRowsInTableView(并且它给出了范围异常,试图绘制比先前报告的行数更大的行)。
我应该调用一种方法吗?还是基于NSView的表不仅仅用于性能关键型表,这些表经常会添加行?