0

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];
    }
4

2 に答える 2

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];
}
于 2013-02-02T13:00:17.570 に答える
0

次のコードでは:

[_sectionsArray removeObjectAtIndex:[pathToCell section]];
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:[pathToCell section]] withRowAnimation:UITableViewRowAnimationFade];

_sectionArray からオブジェクトを削除しています。したがって、この配列は自動的に更新されます。ただし、別のコピーを作成してから、その配列からオブジェクトを削除する場合もあります。したがって、_sectionArray は更新されません。そのため、コピー配列からオブジェクトを削除した後、その新しい配列でセクション配列も更新する必要があります。

NSMutableArray *contentsOfSection = [[_sectionsArray objectAtIndex:[indexPath section]] mutableCopy];
[contentsOfSection removeObjectAtIndex:[indexPath row]];
[_sectionsArray replaceObjectAtIndex:[indexPath section] withObject:contentsOfSection];

これを試してみてください。これがうまくいくことを願っています。

于 2013-02-02T14:03:29.447 に答える