我正试图弄清楚核心数据中我认为应该很容易做的事情,我需要一些帮助。
我有一个数据存储,其中包含过去两年的数据,但在我的应用程序中,我有一定的标准,以便用户只使用该数据的子集(即仅过去一个月)。我创建了谓词以生成获取请求,所有这些都可以正常工作。
我的问题是我想在这个数据子集上运行一些额外的谓词(即我只想要名字= Sally的对象)。我想这样做而不必使用额外的谓词(在NSCompoundPredicate中)重新运行原始谓词;我宁愿在已经创建的数据子集上运行它。
我可以在获取结果上运行谓词吗?
谓词的格式是否与核心数据存储的初始调用相同?
感谢您的帮助。
答案 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];
确保将获取请求的批量大小配置为合理的值以提高性能。