我有一个包含多个部分的表格。当给定的部分没有行时,我从numerOfRowInSection
返回1,然后创建一些默认文本。我不允许选择或编辑此行。
问题是这个部分确实允许在有数据的情况下删除行(再次我在没有数据时禁用它,我显示的是默认文本)。但是,假设本节中有一行实际数据。当用户删除此行时,它应该重新加载表并显示我的默认文本,因为此部分不再存在数据。实际发生的是应用程序终止错误,因为在删除之后它期望0行(先前1行,1行删除,0行结果)。在我的代码中虽然当行为0时我返回1如上所述,因此数学不起作用并且错误关闭了所有内容。
问题:当表为空时如何保留默认行但允许删除,以便在删除最后一行数据时,它将允许我的1个默认文本而不是预期的行?
删除代码:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[self deleteFav:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
处理行数的代码和默认值:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section == 0) return [self.channelIDArray count];
else if (section == 1)
if ([self.favChannelIDArray count]>0) return [self.favChannelIDArray count];
else return 1;
}
错误:
2014-07-31 19:47:19.194 ephIM [3183:60b] * 由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'无效更新:第1部分中的无效行数更新后的现有部分中包含的行数(1)必须等于更新前的该部分中包含的行数(1),加上或减去从该部分插入或删除的行数(0)插入,1删除)并加上或减去移入或移出该部分的行数(0移入,0移出)。'
答案 0 :(得分:1)
当没有正常行时,您的代码没有考虑额外的行。您需要添加:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[self deleteFav:indexPath.row];
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
if (indexPath.section == 1 && self.favChannelIDArray.count == 0) {
// This tells the table to insert the "dummy" row you want
[tableView insertRowsAtIndexPaths:@[ [NSIndexPath indexPathForRow:0 inSection:indexPath.section] ] withRowAnimation:UITableViewRowAnimationFade];
}
[tableView endUpdates];
}
}