Macos 使用核心数据作为缓存

Macos 使用核心数据作为缓存,macos,core-data,appkit,Macos,Core Data,Appkit,我将核心数据用于其存储功能。在某些时候,我会进行外部API调用,要求我更新本地对象图。我目前的愚蠢计划是清除旧NSManagedObject的所有实例,不管它们是否已更新,并用新的等效对象替换它们——某种程度上的特朗普合并策略 我觉得有更好的方法可以做到这一点。我有来自服务器的唯一标识符,因此我应该能够将它们与存储中的对象相匹配。有没有一种方法可以做到这一点,而不必通过标识符从上下文中手动获取对象并重置每个属性?我有没有办法创建一个全新的上下文,重新生成对象图,然后根据核心数据的唯一标识符将其合

我将核心数据用于其存储功能。在某些时候,我会进行外部API调用,要求我更新本地对象图。我目前的愚蠢计划是清除旧NSManagedObject的所有实例,不管它们是否已更新,并用新的等效对象替换它们——某种程度上的特朗普合并策略


我觉得有更好的方法可以做到这一点。我有来自服务器的唯一标识符,因此我应该能够将它们与存储中的对象相匹配。有没有一种方法可以做到这一点,而不必通过标识符从上下文中手动获取对象并重置每个属性?我有没有办法创建一个全新的上下文,重新生成对象图,然后根据核心数据的唯一标识符将其合并?

基于服务器唯一ID的匹配策略是一个很好的方法。希望您可以让服务器只提供自上次更新以来发生更改的对象,您将跟踪这些对象,并在服务器调用中提供这些对象

但是,为了更新核心数据对象,您必须获取它们、实例化NSManagedObjects、进行更改并保存它们。您可以在后台线程子上下文performBlock:中完成这一切,但仍然需要将对象往返到内存中并返回到存储。在子上下文和它自己的线程中执行此操作将使UI保持快速,但您仍然需要进行处理


另一个想法:在过去的一天左右,我一直在阅读关于AFIncrementalStore的文章,这是一个NSIncrementalStore实现,它使用AFNetworking按需提供核心数据属性,并在本地缓存。我还没有用它建造任何东西,但它看起来很光滑。听起来您的项目可能很好地利用了这个库。代码在GitHub上:。

苹果有一个很好的需求指南-。特别是查看名为“高效实现查找或创建”的部分。嗨,哈尔,我一直在玩AFIncrementalStore:它看起来确实非常棒,但不幸的是,由于缺少示例实现,我需要花很多时间来推出自己的商店。即使我实现了自己的存储,我仍然不确定这将如何帮助我将网络存储中的数据合并到本地存储中。不管怎样,谢谢你的提示!