【发布时间】:2019-04-05 11:34:10
【问题描述】:
NSTableView -noteNumberOfRowsChanged documentation 说:
注意:在使用基于 NSView 的表视图时,应避免使用此方法。该表将在数据源中查询新的行数,并根据需要通过动画在表的末尾正确插入(或删除)行。
不幸的是,它没有说明我应该改用什么!
我已将我的应用程序从基于 NSCell 的表格更改为基于 NSView 的表格,以便使用(稍微)更复杂的自定义单元格(据说更容易设计/绘制为 NSViews),但我发现严重的性能问题,即使在小表上也是如此。
我已经在调用 -reloadDataForRowIndexes:columnIndexes:,并且凭经验这不足以让它重新查询 -numberOfRowsInTableView(并且它给出了一个范围异常,试图绘制一个大于先前报告的行数的行)。
有我应该调用的方法吗?还是基于 NSView 的表根本不适用于经常添加行的性能关键表?
【问题讨论】:
-
可以使用基于视图的表来保持高性能。为您的数据源和委托方法提供更多信息或粘贴代码。
-
aneesh171:我稍后会尝试整理一个示例项目,但即使不考虑性能,我应该调用什么? Apple 的 API 明确表示不要使用这种方法,而且我没有看到其他类似的方法。
-
如果你想调用委托/数据源方法,那么你可以调用reloadData,它会调用方法来重新加载所有可见的行。当您滚动时,将为现在可见的行调用委托/数据源方法。理解这一点的最好方法是在这些方法中放入一些 NSLog(或您用来记录消息的任何类)。
标签: macos cocoa nstableview