NSFetchedResultsController
に添付されたを使用するアプリケーションがありますUITableView
。
テーブルの下部に表示されるはずの新しいアイテムでデータベースに挿入が行われると、最後のアイテムのセルが新しく挿入されたアイテムに置き換えられるという非常に奇妙な問題が発生しています。挿入したばかりのアイテムが表示されますが、その直前のアイテムは失われています。それ以降の挿入は同じ動作を示し、テーブルは拡大せず、最後のアイテムが新しいアイテムに置き換えられます。
アプリを再起動すると、データの完全なテーブルが正常に表示されます (つまり、上書きされたセルにはデータベース内のデータが残っています)。フェッチされた結果のコントローラーが、新しいアイテムがどこに行くべきかを見失っているようです。
前後の例:
添加:
の既存のコードcontroller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *fetchTableView = [self tableViewForFetchedResultsController:controller];
switch(type) {
case NSFetchedResultsChangeInsert:
[fetchTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
///....
}