动态数组返回numberOfRowsInSection中的计数

时间:2013-02-02 12:02:04

标签: iphone ios arrays tableview

我在删除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];
    }

2 个答案:

答案 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];

试试这个,我希望这会奏效。