将NSPredicate与Core Data NSFetchedResultsController一起使用

时间:2010-01-17 19:02:17

标签: iphone core-data nspredicate

我有一个fetchedResultsController,它返回了我的实体“Account”的所有记录。

我想快速搜索所有帐户记录中的属性“lastName”== value,然后返回Account对象,或者至少返回fetchedResultsController中对象的indexPath。应该只返回1个对象。

除了遍历每个objectAtIndexPath之外,还有更好的方法来使用NSPredicate搜索fetchController吗?

2 个答案:

答案 0 :(得分:8)

mootymoots,只是使用另一个谓词来过滤获取的对象......

NSPredicate *lastNameMatch = ...
NSArray *matchingFetchedObjects = [fetchedResultsController.fetchedObjects filteredArrayUsingPredicate:lastNameMatch];

这会使您的fetchedResultsController结果未被更改,但会为您提供一个与姓氏谓词匹配的数组。

答案 1 :(得分:3)

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// set up fetch request
...
NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(lastName like '%@')", self.lastName]];
[fetchRequest setPredicate:requestPredicate];
...
// perform fetch
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) { 
    // handle error...
}

...

Account *uniqueAccount = [[self.fetchedResultsController fetchedObjects] anyObject]; // assuming lastName attribute is unique