我有一个由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;
}发布于 2011-06-05 04:27:56
最好使用谓词。例如:
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];这是一个粗略的例子,因为我不知道if的形式或核心数据中的内容,但基本上您可以在核心数据中搜索存储在数组中的if,并且可以进一步实现谓词,以便只返回特定的值。这至少可以让你开始
https://stackoverflow.com/questions/6239137
复制相似问题