从核心数据循环阵列和提取数据
问题描述:
我有一个200个数字(项目ID)数组,我想从每个项目的核心数据使用其项目ID获取一些数据。我假设这样做的唯一方法是在每次迭代中执行fetchRequest的循环中查询核心数据,并将结果添加到可变数组中。这看起来像一个记忆猪,循环超过200个项目可能不是获得我需要的数据的最佳方式。从核心数据循环阵列和提取数据
所有这些数据的目的地是一张表,所以我想使用NSFetchedResultsController,但是,这可能会要求太多。
当你有几百个你想查询的项目时,从核心数据中检索数据的最佳方法是什么?
说明性的代码示例将不胜感激。
这里是我的代码:
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Shows" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"downloadCount" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"showId IN %@", resultsArray];
[fetchRequest setPredicate:predicate];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
[sort release];
[fetchRequest release];
[theFetchedResultsController release];
return _fetchedResultsController;
}
答
这将是最好使用一个谓语。例如:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Set the entity for the fetch request.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"myID IN %@", IDArray];
// Set the predicate for the fetch request.
[fetchRequest setPredicate:predicate];
// Perform the fetch.
NSError *error;
NSArray *array = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
这是一个最原始的例子,因为我不知道你的ID或什么是核心数据的形式,但基本上你可以搜索核心数据存储阵列中唯一的ID并且可以进一步实现谓词以只返回某些值。这应该至少让你开始
我所缺少的是@“myID IN%@”,IDArray但是,我仍然有一个问题,因为fetchRequest没有返回任何值,即使我知道IDArray有200条目。我会将我的代码添加到问题中。 – 2011-06-05 01:20:26
看着它,我不能说我看到你有什么问题。执行实际的'performFetch:'部分的代码怎么样? – justin 2011-06-05 03:00:58
问题是,我正在创建resultsArray从请求到服务器的JSON字符串。该表正在加载零单元格,因此调用[self.tableView reloadData]; fetchRequest返回后仍然没有任何作用。我可能会在用户有机会访问此页面之前,在应用程序委托中发出请求并更新核心数据。 - Slev ...感谢您的帮助。 – 2011-06-05 04:02:14