【问题标题】:How to filter NSFetchedResultsController like "filteredArrayUsingPredicate"如何过滤 NSFetchedResultsController 像“filteredArrayUsingPredicate”
【发布时间】:2012-02-06 21:20:46
【问题描述】:

是否可以在不重新调用数据库层的情况下过滤 NSFetchedResultsController 的结果,就像我使用带有“filteredArrayUsingPredicate”的 NSArray 一样

谢谢

【问题讨论】:

  • 有什么问题?你自己回答了...NSFetchedResultsController 有属性@property (nonatomic, readonly) NSArray *fetchedObjects,这是一个可以过滤的数组
  • 谢谢,如果我在 TableViewControlle 中使用 NSFetchedResultsController,我如何告诉 NSFetchedResultsController 使用生成的 NSArray 而不是它自己的 @property(非原子,只读)NSArray *fetchedObjects 的方法,如 objectAtIndexPath

标签: objective-c ios core-data nsarray nspredicate


【解决方案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];
    // ...

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

【讨论】:

  • tnx.我想要做的是,在从数据库中获取结果后,使用不同的谓词(在内存中)过滤结果。我认为你写的内容会导致对数据库层的新查询。
  • @mica 你也可以使用谓词过滤内存数组,只需使用 NSArray 上的 filteredArrayUsingPredicate: 方法。
猜你喜欢
  • 1970-01-01
  • 2011-05-27
  • 2011-06-19
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多