こんにちはオーバーフローの仲間
バックグラウンド スレッドで 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 でオブジェクトを表示するにはどうすればよいですか?
前もって感謝します :)