cellForRowAtIndexPath:在调用numberOfRowsInSection:时立即调用

时间:2013-03-06 05:32:53

标签: iphone uitableview ios6

在调用 UITableView 上的reloadData方法后几次遇到此问题,我还没弄清楚原因?

这是一个问题,因为如果更新了表视图的数据,tableview将不必要地查询不存在的行上的单元格。它不存在,因为numberOfRowsInSection:在这种情况发生之前不会被调用。

是否受到reloadData方法调用的影响? (它在主线程上调用,而不是在其他任何地方调用。)

更新

cellForRowAtIndexPath:可以通过其他方式调用,例如查询visibleCells。 可能是这不属于reloadData的一部分。

1 个答案:

答案 0 :(得分:2)

  

调用此方法重新加载用于构造表的所有数据,包括单元格,节页眉和页脚,索引数组等。为了提高效率,表视图仅重新显示可见的行。如果表因重新加载而缩小,它会调整偏移量。表视图的委托或数据源在希望表视图完全重新加载其数据时调用此方法。不应在插入或删除行的方法中调用它,尤其是在通过调用beginUpdates和endUpdates实现的动画块中

根据apple文档,reloadData仅重新加载可见单元格。如果您没有正确使用单元格标识符,这可能会出现问题。

这仍然可能是一个线程问题。在调用reloadData之前检查您是否在主线程上运行,如果不是,请在主队列上运行dispatch_sync。

如果你已经在主队列上尝试在主队列上运行dispatch_anything,应用程序将退出。