2012-02-06 51 views
1

是有可能,以过滤NSFetchedResultsController的结果,而新的呼叫到databaselayer,就像我跟一个NSArray做到这一点与“filteredArrayUsingPredicate”如何筛选NSFetchedResultsController像“filteredArrayUsingPredicate”

感谢

+0

什么问题?你自己回答了......'NSFetchedResultsController'有属性'@property(nonatomic,只读)NSArray * fetchedObjects',这是一个数组,你可以过滤 – 2012-02-06 21:30:30

+0

谢谢,如果我在TableViewControlle中使用NSFetchedResultsController,我该如何告诉NSFetchedResultsController使用生成的NSArray代替它自己的@property(非原子,只读)NSArray * fetchedObjects,它的方法如objectAtIndexPath – mica 2012-02-06 21:37:45

回答

1

你可以在你用来初始化NSFetchedResultsController的NSFetchRequest上设置一个谓词。例如:

- (NSFetchedResultsController *)fetchedResultsController { 

    if (fetchedResultsController != nil) { 
     return fetchedResultsController; 
    } 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

    fetchRequest.entity = <YOUR ENTITY> 

    fetchRequest.predicate = [NSPredicate predicateWithFormat:<YOUR PREDICATE>]; 

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:moc sectionNameKeyPath:nil cacheName:nil]; 
    // ... 

您应该不需要“刷新”提取的结果控制器,因为它应该随着更改和保存而更新。您可能需要使用样板代码来使用和/或更新带有提取结果控制器的表视图。

+0

tnx。我想要做的是,在从数据库中提取不同的谓词(在内存中)之后过滤结果。我认为你写的会导致对数据库层的新查询。 – mica 2012-02-06 23:45:08

+0

@mica您可以使用谓词过滤内存数组,只需使用NSArray上的filteredArrayUsingPredicate:方法即可。 – gerry3 2012-04-18 06:55:17