NSFetchedResultsController を使用してテーブルビューを正常に更新しています。これが私がやっていることです:
- アプリをアプリにロード
- (NSFetchedResultsController *)fetchedResultsController
し、テーブルビューを設定するために呼び出します - 設定
self.fetchedResultsController.delegate = nil
- 指定されたすべてのエンティティを削除します
<myEntityName>
- を使用して1 つ以上のエンティティを MOC に挿入する
[NSEntityDescription insertNewObjectForEntityForName:<myEntityName> inManagedObjectContext:managedObjectContext];
- FetchedResultsController バックアップのフック:
self.fetchedResultsController.delegate = self;
- 次に、MOCを保存します
このすべての後、FetchedResultsController メソッドが起動し、テーブルの更新controllerDidChangeContent:
を配置しました。満足しています。[self.tableView reloadData]
繰り返しますが、これはすべて正常に機能します。何時間も頭をぶつけた原因は、単にメッセージを削除すると[NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:managedObjectContext];
、次のエラーが表示されることです。
'NSInternalInconsistencyException', reason: 'no section at index 3'
私は一般的に何が起こっているかを知っています.MOCはFetchedResultsControllerと歩調を合わせていません.他の人がこれを経験するcontroller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
と、引き出し始めconfigureCell:atIndexPath:
て行ごとにfetchControllerを更新するようです.
しかし、私の質問は次のとおりです。managedObject 挿入メッセージを単純に削除すると、それ以外の場合は機能しているコードが壊れるのはなぜですか?
元のコードでは、mangedObjects を削除してから managedObjects を挿入しましたが、managedObjects のみを削除するとコードが壊れます。
各セルを個別に更新する必要はありません。現在のコードは正常に動作します。どうすれば機能しますか?
ここで何が欠けていますか?