0

マルチコンテキストコアデータに苦労しているので、助けていただければ幸いです。

同期操作が終了すると、このブロックは次のように呼び出されます。

[[SyncEngine sharedEngine]setFinishedSyncCompletionBlock:^{
        //---setting FRC to nil did refresh tableview but it is kinda slow
       //  self.fetchedResultsController=nil;
        [self loadRecordsFromCoreData];
        [self.tableView reloadData];

    }];

そして、ここで、新しい管理対象オブジェクトがコンテキスト内にあることがわかります。ただし、[self.tableViewreloadData]を呼び出します。この後、テーブルビューが更新されないか、(void)controllerDidChangeContent:(NSFetchedResultsController *)controllerが起動しません。

- (void)loadRecordsFromCoreData {
    NSLog(@"here loadRecordsFromCoreData");
    [self.managedObjectContext.parentContext performBlock:^{
       //---this is also a trial for resetting FRC
       // [self.managedObjectContext reset];
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Event"];

        // Edit the sort key as appropriate.
        fetchRequest.sortDescriptors = @[ [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO] ];

        NSArray *objects = [self.managedObjectContext.parentContext executeFetchRequest:fetchRequest error:NULL];
        NSArray *objectIDs = [objects valueForKey:@"objectID"];

        [self.managedObjectContext performBlock:^{

            NSArray *objects = [self.managedObjectContext objectsWithIDs:objectIDs];
          //  self.fetchedResultsController.managedObjectContext = self.managedObjectContext;
            NSLog(@"objects: %lu", (unsigned long)objects.count);
        }];
    }];
4

1 に答える 1

0

これは、loadRecordsFromCoreDataのブロックが実行される前にreloadtableメソッドが呼び出されているために発生しています。[self.tableView reloadData];いくつかの変更を加えるだけでNSLog(@"objects: %lu", (unsigned long)objects.count);self.managedObjectContext performBlockブロック内で呼び出します。

于 2013-01-03T10:47:25.970 に答える