tableView beginUpdates / endUpdates 阻止重新加载整个表,即使是空的
Posted
技术标签:
【中文标题】tableView beginUpdates / endUpdates 阻止重新加载整个表,即使是空的【英文标题】:tableView beginUpdates / endUpdates block reloading entire table even when empty 【发布时间】: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
正在为您的数据源中的每个项目调用?
【参考方案1】:
目标 c iOS reloadRowsAtIndexPaths , reloadSections
if([self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1 == -1)
row = 0;
else
row = [self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1 ;
NSIndexPath* indexPath = [NSIndexPath indexPathForRow: (row) inSection: ([self.tableView numberOfSections]-1)];
// [self.tableView reloadData];
[self.tableView beginUpdates];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
NSLog(@”Number of Sections %ld”, (long)[self.tableView numberOfSections]);
NSLog(@”Number of Rows %ld”, [self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1);
【讨论】:
以上是关于tableView beginUpdates / endUpdates 阻止重新加载整个表,即使是空的的主要内容,如果未能解决你的问题,请参考以下文章
UITableView beginUpdates/endUpdates 回调
tableView beginUpdates / endUpdates 阻止重新加载整个表,即使是空的