从核心数据循环阵列和提取数据

问题描述:

我有一个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并且可以进一步实现谓词以只返回某些值。这应该至少让你开始

+0

我所缺少的是@“myID IN%@”,IDArray但是,我仍然有一个问题,因为fetchRequest没有返回任何值,即使我知道IDArray有200条目。我会将我的代码添加到问题中。 – 2011-06-05 01:20:26

+0

看着它,我不能说我看到你有什么问题。执行实际的'performFetch:'部分的代码怎么样? – justin 2011-06-05 03:00:58

+0

问题是,我正在创建resultsArray从请求到服务器的JSON字符串。该表正在加载零单元格,因此调用[self.tableView reloadData]; fetchRequest返回后仍然没有任何作用。我可能会在用户有机会访问此页面之前,在应用程序委托中发出请求并更新核心数据。 - Slev ...感谢您的帮助。 – 2011-06-05 04:02:14