4

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]) の作成を実行すると、すべて正常に動作します。

私は何を間違っていますか?私はこれで何時間も立ち往生しています。

4

0 に答える 0