我已经花了很多时间研究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];
答案 0 :(得分:7)
如果你想从你的数组中删除一个字典作为下标变量,那么你需要这一行。
[yourObject removeObjectAtIndex:indexPath.section];
然后按此行重新加载表
[yourTable reloadData];
现在,由于您的表依赖于此数据源,因此它会自动从表中删除。