【发布时间】:2015-02-25 03:17:36
【问题描述】:
我有一个 tableView,它会定期通过来自远程服务的数据进行更新。我加载数据,并存储我刚刚插入、删除或更新的各种数据的 indexPaths。然后我有一个 begin/endUpdates 块来完成必要的操作,如下所示。
[self.tableView beginUpdates];
if (pathsToDelete) {
[self.tableView deleteRowsAtIndexPaths:pathsToDelete withRowAnimation:UITableViewRowAnimationNone];
}
if (pathsToRefresh) {
[self.tableView reloadRowsAtIndexPaths:pathsToRefresh withRowAnimation:UITableViewRowAnimationNone];
}
[self.tableView insertRowsAtIndexPaths:indexPathsToAdd withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
我最近注意到重新加载单元的次数超出了我的预期。在调试器中,我注意到在刷新单个记录的情况下(即,pathsToRefresh 是唯一有任何内容的记录,并且它只有一个索引),整个表实际上正在重新加载。我的意思是,我看到了对表中每个单元格的数据源请求。
在调试过程中,我开始剥离东西。我一直到只有我有的地步
[self.tableView beginUpdates];
[self.tableView endUpdates];
即便如此,我看到整个表重新加载(即 cellForRowAtIndexPath 为数据源中的每个值触发)。所以我认为发生了我错过的其他事情。但是删除这两种方法导致重新加载停止。
如果块内没有任何内容,begin/endUpdates 不应该什么都不做吗?我对这里实际发生的事情一无所知,因为文档表明他们所做的只是书挡表操作 - 在这种情况下我没有。
【问题讨论】:
-
那么,
cellForRowAtIndexPath正在为您的数据源中的每个项目调用?
标签: ios objective-c uitableview