tableview删除部分的最后一行

时间:2011-05-05 02:39:01

标签: iphone cocoa-touch ios uitableview

我已经花了很多时间研究stackoverflow / google并且研究了几个关于类似问题的帖子。然而,他们都没有解决我遇到的特殊问题。

简而言之,我有一个NSMutableArray的NSMutableDictionay(-ies)。每个字典都包含一个NSMutableArray。当我删除数组中的最后一项时,我也想删除字典。在tableview文字中,我想在删除该部分的最后一行时删除该部分。

我确信数据源是一致的。

这篇帖子:UITableView: deleting sections with animation建议直接删除该部分,如果要删除的行是最后一行。

如果该部分是我的根数组中的最后一部分,则此方法可以正常工作。

我发现的错误是,如果部分不是最后一部分,则它后面的部分将取代它。当系统绘制删除动画时,它会抛出NSInternalInconsistencyException

说,我有第0部分和第1部分,都有一行。当我删除indexPath(0,0)时,我会检测到第0部分,因为它只有一行,然后我删除commitEditingStyle中的第0部分

抛出异常是因为用户删除了第0节中的第0行,因此第0节中的结果行数应该从1更改为0.但是,删除后,旧的第1节现在变为第0节,并且它将返回第0节中的行数为1。

这里有什么建议吗?或者我错过了一些非常简单的事情?

我在commitEditingSytle中的代码:

[tableView beginUpdates];
[... remove the  item from array of this dictionary...]
// if last row in section, remove the section
NSNumber *section = [NSNumber numberWithUnsignedInteger: indexPath.section];
if ([[FoodTypes subtypes:section] count] == 0) 
{
    [...remove the dictionary from root array...]

    [tableView deleteSections: [NSIndexSet indexSetWithIndex: indexPath.section] withRowAnimation:YES];
}
else 
{
    // otherwise, remove the row only
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
[tableView endUpdates];

1 个答案:

答案 0 :(得分:7)

如果你想从你的数组中删除一个字典作为下标变量,那么你需要这一行。

[yourObject removeObjectAtIndex:indexPath.section];

然后按此行重新加载表

[yourTable reloadData];

现在,由于您的表依赖于此数据源,因此它会自动从表中删除。