我有一个由 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。该方法的开始更新实例发现 specialCellShowing 为真并返回 1 并退出。现在进行了插入调用,然后在 endUpdates 上发生了崩溃,因为 tableview 认为表中有 1 个单元格,插入了 1 个单元格,之前有 1 个单元格。另一个问题是我需要返回 1,因为在随后对 numberOfRowsInSection 的调用中,我希望它不会弄乱表格,只是返回说我有一个自定义单元格。
我想我想知道是否有更好的方法来解决这个问题?