调用numberOfRowsInSection中的TableView BeginUpdates



我有一个由NSFectchedResultsController支持的表视图,当我没有来自FRC的结果时,我试图显示一个自定义单元格。我遇到的问题是BeginUpdates调用numberOfRowsInSection。我想保持表视图处于活动状态(而不仅仅是在其位置显示图像),以便用户可以执行拉取刷新。

代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if ([self.fetchedResultsController.fetchedObjects count] == 0) {
if (!specialCellShowing) {
specialCellShowing = TRUE;
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForItem:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
}
return 1;
}
else {
if (specialCellShowing) {
specialCellShowing = FALSE;
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForItem:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
}
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];
return [self.fetchedResultsController.fetchedObjects count];
}

}

问题是返回1;陈述发生的情况是,第一次调用numberOfRowsInSection时,它将specialCellShowing设置为TRUE,并点击开始更新,从而调用numberOfRowsInSection。方法的begin-updates实例发现specialCellShowing为true,并返回1并退出。现在进行了insert调用,然后endUpdates发生崩溃,因为tableview认为表中有1个单元格,插入了1个单元格和之前的1个单元格。另一个问题是,我需要在它所在的位置返回1,因为在随后对numberOfRowsInSection的调用中,我希望它不要干扰表,只返回说我有一个自定义单元格。

我想我想知道的是,是否有更好的方法来解决这个问题?

当表视图更新其显示时,不能更改表视图。除非要更改表视图,否则不需要调用deleteRowsAtIndex路径。您需要有一个单独的方法:一个响应事件并更改表视图数据的方法(可能调用begin/endUpdates并添加或删除行)-numberOfRowsInSection应该只检查备份数据并返回一个答案。此时表视图正在进行完全更新,因此在表视图中添加和删除行在此时毫无用处。

最新更新