【问题标题】:Core Data working with subset of full data store...HOW?核心数据使用完整数据存储的子集......如何?
【发布时间】:2014-01-26 22:43:20
【问题描述】:
我正在拼命想在 Core Data 中找出一些我认为应该很容易做到的东西,我需要一些帮助。
我有一个数据存储,其中包含过去两年的数据,但在我的应用程序中,我有一定的标准,以便用户只使用该数据的子集(即仅过去一个月)。我已经创建了谓词来生成获取请求并且一切正常。
我的问题是,我想在这个数据子集上运行一些额外的谓词(即我只想要 name=Sally 的对象)。我想这样做,而不必使用附加谓词(在 NSCompoundPredicate 中)重新运行原始谓词;我宁愿只在已经创建的数据子集上运行它。
我可以只对提取结果运行一个谓词吗?
谓词的格式是否与对核心数据存储的初始调用相同?
感谢您的帮助。
【问题讨论】:
标签:
ios
objective-c
core-data
nspredicate
nsmanagedobjectcontext
【解决方案1】:
您可以使用谓词过滤原始结果数组。请参阅 NSArray 的过滤数组使用Predicate 方法。
【解决方案2】:
我会考虑做你所说的唯一原因是如果你发现在 FetchedResultsController 级别修改谓词会导致性能显着下降。
我的建议是在视图控制器中获取对 fetchedResultsController 的引用,并使用与其他搜索参数匹配的复合谓词更新谓词。
如果您将 viewControllers 数据源绑定到谓词的谓词,您将无法正确利用 NSFetchedResultsControllers 委托方法,这些方法允许轻松、动态地更新视图,例如表视图和集合视图。
/* assuming you're abstracting your datastore with a singleton */
self.fetchedResultsController = [DataStore sharedStore].fetchedResultsController;
self.fetchedResultsController.delegate = self;
[self.fetchedResultsController.fetchRequest setPredicate:yourPredicate];
确保将获取请求的批处理大小配置为合理的值,以提高性能。