2010-01-17 121 views
1

我有一个fetchedResultsController,它返回了我的实体“Account”的所有记录。使用NSPredicate和核心数据NSFetchedResultsController

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

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

回答

8

mootymoots,只是另一个谓词筛选获取的对象...

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

任由你fetchedResultsController结果未改变,但给你一个匹配姓谓词的数组。

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 
+0

感谢亚历克斯 - 你是说我应该忽略已经建立的fetchedResultsController构建我的NSTableView,并为此创建一个额外的?我想我说的是,我不能对fetchedResultsController中已经检索到的Account对象做NSPredicate? – mootymoots 2010-01-17 19:19:24

+1

是的,您可以将谓词应用于现有的'NSSet'或'NSArray'。不,你不需要创建额外的FRC。见:http://theocacao.com/document.page/346 – 2010-01-18 06:16:30

相关问题