私は以下を機能させようとしています。
APIからフェッチされたデータをテーブルビューに表示しているテーブルビューがあります。その目的のために、私はNSFetchedResultsControllerを使用しています。
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.database.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
次のようなバックグラウンドコンテキストでエンティティを作成します。
NSManagedObjectContext *backgroundContext;
backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
backgroundContext.parentContext = document.managedObjectContext;
[backgroundContext performBlock:^{
[MyAPI createEntitiesInContext:backgroundContext];
NSError *error = nil;
[backgroundContext save:&error];
if (error) NSLog(@"error: %@",error.localizedDescription);
[document.managedObjectContext performBlock:^{
[document updateChangeCount:UIDocumentChangeDone];
[document.managedObjectContext save:nil];
}];
これで、新しいデータを取得する(および上記のようなエンティティを挿入/更新する)たびに、NSFetchedResultsControllerが正常に機能しなくなります。特に、私は常に1つのエンティティを更新しています(新しいエンティティを作成していません)が、テーブルビューには2つのエンティティが表示されます。アプリを再起動すると、正しく表示されます。
self.database.managedObjectContextでエンティティの作成([MyAPI createEntities])を実行すると、すべてが正常に機能します。
私が間違っていることについて何か考えはありますか?ここでSOの既存のスレッドを見ると、私はそれを正しい方法で行っていると思います。繰り返しますが、バックグラウンドコンテキスト(ただしdocument.managedObjectContext)でコアデータの保存を行わない場合は、正常に機能します...