1

こんにちはオーバーフローの仲間

バックグラウンド スレッドで NSManagedObjects をフェッチし、NSFetchedResultsController を介して結果を表示する方法を理解するのに苦労しています。

これまでの私のコードは次のとおりです。

       _theManagedObjectContext = [[DataManager sharedInstance] mainManagedObjectContext]; 

   __block NSMutableArray *objectsIDs;

    [[[DataManager sharedInstance] backgroundManagedObjectContext] performBlock:^{

        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        fetchRequest.entity = [NSEntityDescription entityForName:@"Ret" inManagedObjectContext:[[DataManager sharedInstance] backgroundManagedObjectContext]];

        NSArray *results =  [[[DataManager sharedInstance] backgroundManagedObjectContext] executeFetchRequest:fetchRequest error:nil];

        for (Ret *ret in results) {
            NSManagedObjectID *moID = [ret objectID];

            [objectsIDs addObject:moID]; 

            NSLog(@"%@", objectsIDs); 
        }

        [[[DataManager sharedInstance] mainManagedObjectContext ] performBlock:^{

            [self loadDishesWithObjectIDs:objectsIDs]; 

        }];



    }];

まず、バックグラウンド スレッドですべてのオブジェクトをフェッチし、次に NSMangedObjectID をメイン スレッドに転送します。

私の「loadDishes」メソッドでは:

- (void)loadDishesWithObjectIDs:(NSArray *)objectsIDs {

     /*
    [NSFetchedResultsController deleteCacheWithName:@"dishes"];
    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:**???**? managedObjectContext:_theManagedObjectContext sectionNameKeyPath:nil cacheName:@"dishes"];
    _fetchedResultsController.delegate = self;




    NSError *error = nil;


    if (![_fetchedResultsController performFetch:&error]) {
        NSLog(@"Fetch Failed");

    }


    NSArray *theDishes = _fetchedResultsController.fetchedObjects;*/



}

バックグラウンドスレッドからフェッチされた ObjectID によって NSFetchResultscontroller でオブジェクトを表示するにはどうすればよいですか?

前もって感謝します :)

4

1 に答える 1

1

次のようなフェッチ リクエストを作成する必要があります。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:@"Ret" 
                                  inManagedObjectContext:[[DataManager sharedInstance] mainManagedObjectContext]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"self IN %@", objectIDs];
于 2013-04-05T15:26:15.250 に答える