我有一个tableView,它定期通过来自远程服务的数据进行更新。我加载数据,并存储我刚刚插入,删除或更新的各种数据的indexPath。然后我有一个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是唯一一个有任何东西,并且它只有一个索引),整个表实际上正在重新加载。通过这种方式,我的意思是我看到了表中每个单元格对dataSource的请求。
在调试中,我开始剥离事情。我一直到了我只有
的地步 [self.tableView beginUpdates];
[self.tableView endUpdates];
即便如此,我看到整个表重新加载(即对数据源中的每个值都触发了cellForRowAtIndexPath)。所以我假设其他事情正在发生,我错过了..但删除这两种方法导致重新加载停止。
在块内没有任何内容的情况下,不应该开始/结束更新吗?我对这里发生的事情感到茫然,因为doc表示他们所做的只是书挡表操作 - 在这种情况下我没有。
答案 0 :(得分:3)
目标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);