核心数据使用完整数据存储的子集...如何?

时间:2014-01-26 22:43:20

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

我正试图弄清楚核心数据中我认为应该很容易做的事情,我需要一些帮助。

我有一个数据存储,其中包含过去两年的数据,但在我的应用程序中,我有一定的标准,以便用户只使用该数据的子集(即仅过去一个月)。我创建了谓词以生成获取请求,所有这些都可以正常工作。

我的问题是我想在这个数据子集上运行一些额外的谓词(即我只想要名字= Sally的对象)。我想这样做而不必使用额外的谓词(在NSCompoundPredicate中)重新运行原始谓词;我宁愿在已经创建的数据子集上运行它。

我可以在获取结果上运行谓词吗?

谓词的格式是否与核心数据存储的初始调用相同?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用谓词过滤原始结果数组。请参阅NSArray filteredArrayUsingPredicate方法。

答案 1 :(得分:1)

我考虑做你正在谈论的唯一原因是你发现在FetchedResultsController级修改谓词会导致性能显着下降。

我的建议是在视图控制器中获取对fetchedResultsController的引用,并使用与其他搜索参数匹配的复合谓词更新谓词。

如果要将viewControllers数据源绑定到谓词的谓词,则无法正确使用NSFetchedResultsControllers Delegate方法,这些方法允许轻松,动态地更新视图,例如表视图和集合视图。

    /* assuming you're abstracting your datastore with a singleton */
    self.fetchedResultsController = [DataStore sharedStore].fetchedResultsController;  
    self.fetchedResultsController.delegate = self;
    [self.fetchedResultsController.fetchRequest setPredicate:yourPredicate]; 

确保将获取请求的批量大小配置为合理的值以提高性能。