tableView beginUpdates / endUpdates阻止重新加载整个表,即使是空的

时间:2015-02-25 03:17:37

标签: ios objective-c uitableview

我有一个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表示他们所做的只是书挡表操作 - 在这种情况下我没有。

1 个答案:

答案 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);