使用Core Data作为缓存

时间:2013-03-27 16:17:07

标签: macos core-data appkit

我正在使用Core Data的存储功能。在某些时候,我进行外部API调用,要求我更新本地对象图。我目前的(哑)计划是清除旧的NSManagedObjects的所有实例(无论它们是否已被更新)并用它们的新等价物替换它们 - 一种特朗普合并策略。

我觉得有更好的方法可以做到这一点。我有来自服务器的唯一标识符,所以我应该能够将它们与商店中的对象相匹配。有没有办法在不通过标识符手动从上下文中提取对象并重置每个属性的情况下执行此操作?有没有办法让我创建一个全新的上下文,重新生成对象图,然后根据它们的唯一标识符将其提供给Core Data进行合并?

1 个答案:

答案 0 :(得分:0)

根据服务器的唯一ID,您的匹配策略是一种很好的方法。希望您可以让服务器仅提供自上次更新以来已更改的对象(您将跟踪并在服务器调用中提供)。

但是,为了更新Core Data对象,您必须获取它们,实例化NSManagedObjects,进行更改并保存它们。您可以在后台线程(子上下文,performBlock:)中完成所有操作,但您仍然需要将对象往返内存并返回存储。在子上下文和它自己的线程中执行它将使您的UI保持活泼,但您仍然需要进行处理。

另一个想法:在最后一天左右,我一直在阅读AFIncrementalStore NSIncrementalStore实现,该实现使用AFNetworking按需提供Core Data属性,在本地缓存。我还没有用它构建任何东西,但它看起来很漂亮。听起来你的项目可能很好地利用了这个库。代码在GitHub上:https://github.com/AFNetworking/AFIncrementalStore