我在删除tableView
中的行时遇到问题,因为我有多个部分是在视图控制器出现时动态生成的,所以当我在numberOfRowsInSection
中返回计数时,它最终看起来像这样:
NSInteger count = [[_sectionsArray objectAtIndex:section] count];
return count;
现在当删除时,我会生成相同类型的数组:
NSMutableArray *contentsOfSection = [[_sectionsArray objectAtIndex:[indexPath section]] mutableCopy];
[contentsOfSection removeObjectAtIndex:[indexPath row]];
正如您所看到的,我正在从未链接到tableView
的数组中删除该对象,因此它只返回NSInternalInconsistencyException
有人可以帮我吗?
更新
[contentsOfSection removeObjectAtIndex:[pathToCell row]];
if ([contentsOfSection count] != 0) {
// THIS DOESN'T
[self.tableView deleteRowsAtIndexPaths:@[pathToCell] withRowAnimation:UITableViewRowAnimationFade];
}
else {
// THIS WORKS!
[_sectionsArray removeObjectAtIndex:[pathToCell section]];
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:[pathToCell section]] withRowAnimation:UITableViewRowAnimationFade];
}
答案 0 :(得分:1)
muatableCopy将创建该数组的另一个实例。因此,您要从新创建的数组中删除项目,而不是从旧数组中删除项目。始终将'contentsOfSection'存储为_sectionsArray中的可变数组。然后像这样删除。
NSMutableArray *contentsOfSection = [_sectionsArray objectAtIndex:[indexPath section]];
[contentsOfSection removeObjectAtIndex:[pathToCell row]];
if ([contentsOfSection count] != 0) {
[self.tableView deleteRowsAtIndexPaths:@[pathToCell] withRowAnimation:UITableViewRowAnimationFade];
}
else {
// THIS WORKS!
[_sectionsArray removeObjectAtIndex:[pathToCell section]];
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:[pathToCell section]] withRowAnimation:UITableViewRowAnimationFade];
}
答案 1 :(得分:0)
在以下代码中:
[_sectionsArray removeObjectAtIndex:[pathToCell section]];
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:[pathToCell section]] withRowAnimation:UITableViewRowAnimationFade];
您正在从_sectionArray中删除对象。所以这个数组会自动更新。但在其他情况下,您正在创建另一个副本,然后从该数组中删除对象。所以你的_sectionArray不会更新。因此,在从复制数组中删除对象之后,还必须使用该新数组更新section数组。
NSMutableArray *contentsOfSection = [[_sectionsArray objectAtIndex:[indexPath section]] mutableCopy];
[contentsOfSection removeObjectAtIndex:[indexPath row]];
[_sectionsArray replaceObjectAtIndex:[indexPath section] withObject:contentsOfSection];
试试这个,我希望这会奏效。