0

NSMutableSet使用中のコアデータでオブジェクトを削除できません。テーブルビューの2番目のセクションにある「プレーヤー」オブジェクトを削除しようとしています。エラーが発生します。

無効な更新:セクション1の行数が無効です。更新後の既存のセクションに含まれる行数(6)は、更新前のそのセクションに含まれる行数(6)に、プラスまたはマイナスの数と等しくなければなりません。そのセクションに挿入または削除された行の数(0が挿入され、1が削除された)およびプラスまたはマイナスそのセクションに出入りした行の数(0が入ってきた、0が出て行った)

解決

私のコードを見てください。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle          forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {


        if (indexPath.section==0) {

        }else{

            _player = [self.fetchedResultsController.fetchedObjects objectAtIndex: indexPath.row];
            [self.managedObjectContext deleteObject:_player];
            [self performFetch];
            [self.managedObjectContext save:nil];

            // here the solution to make it works...
            [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1]  withRowAnimation:UITableViewRowAnimationFade];               
        }            
    }   
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    switch(section){
        case 0:
            return 4;
        case 1:
            return [self.fetchedResultsController.fetchedObjects count];
    }
    return 0;
}
4

1 に答える 1

1

通常、テーブルビューから要素を削除または削除する必要がある場合は、次の2つの手順を実行する必要があります。

  1. モデルを扱う
  2. テーブルアニメーションを扱う

あなたは最初の部分だけを実行しました。完了するには、次のような通話を実行する必要があります

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
        withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];

deleteRowsAtIndexPaths:withRowAnimation:テーブルに対して複数のアニメーションを実行する場合は、間beginUpdates にラップする必要がありendUpdatesます。たとえば、削除、変更などです。ここではそうではありませんが、とにかく実行できます。

NSFetchedResultsControllerコアデータを使用する場合、デリゲートを使用してこれを無料で使用できます(コードを作成する必要があります)NSFetchedResultsControllerDelegate。したがって、deleteObject呼び出しで要素を削除すると(ステップ1)、デリゲートはその変更に自動的に応答し、ステップ2を実行します。

NSFetchedResultsControllerの使用方法を参照して、正しく設定する方法を理解してください。

上記のコードの修正は、を使用することです

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1]  withRowAnimation:UITableViewRowAnimationFade];

お役に立てば幸いです。

于 2012-07-08T13:14:04.617 に答える