ユーザーがブックマークしたアイテムを表示する NSFetchedResultsController に裏打ちされた UITableView があります。行内のボタンからアイテムのブックマークを解除でき、問題が発生します。アイテムのブックマークを解除すると、述語と一致しなくなるため、テーブル ビューから消えるはずですが、セクションごとの行数が更新によって変更されたため、次のエラーのバリエーションが表示されます。
CoreData: エラー: 重大なアプリケーション エラーです。-controllerDidChangeContent: の呼び出し中にデリゲート NSFetchedResultsController から例外がキャッチされました。無効な更新: セクション 0 の行数が無効です。更新後の既存のセクションに含まれる行数 (3) は、更新前にそのセクションに含まれる行数 (4) にプラスまたはマイナスの数値を指定する必要があります。そのセクションに挿入または削除された行数 (0 挿入、0 削除)、およびそのセクションに移動された、またはそのセクションから移動された行数 (0 移動、0 移動)。userInfo (ヌル)
これが私の非常に単純な didChangeObject メソッドです。
-(void)controller:(NSFetchedResultsController *)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
{
[super controller:controller didChangeObject:anObject atIndexPath:indexPath forChangeType:type newIndexPath:newIndexPath];
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
NSFetchedResultsController に不一致のカウントを気にしないように指示できる方法はありますか? それとも、まったく別のアプローチが必要ですか?