NSFetchedResultsController,核心数据和线程
Posted
技术标签:
【中文标题】NSFetchedResultsController,核心数据和线程【英文标题】:NSFetchedResultsController, Core data and Threading 【发布时间】:2013-04-05 15:12:14 【问题描述】:各位大侠们好
我很难弄清楚如何在后台线程中获取 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 的对象?
提前谢谢你:)
【问题讨论】:
【参考方案1】:您需要创建一个类似这样的获取请求
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:@"Ret"
inManagedObjectContext:[[DataManager sharedInstance] mainManagedObjectContext]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"self IN %@", objectIDs];
【讨论】:
以上是关于NSFetchedResultsController,核心数据和线程的主要内容,如果未能解决你的问题,请参考以下文章