Coredata:如何将 2 个持久存储与一个持久存储协调器交替使用?
Coredata: How to use alternatively 2 persistent stores with one persistent store coordinator?
设置:
我的应用程序使用自己的数据(自己的状态)或其他用户共享的数据(共享状态),并且可以在两种状态之间切换。
该应用程序使用带有 CloudKit 镜像的 Coredata:自己的数据存储在私有数据库中,共享数据存储在共享数据库中。两个数据库都自动同步到两个持久存储,私有和共享,由一个持久存储协调器协调。
如果处于自己的状态,则应从私有存储中获取数据并仅存储在那里。
或者,在共享状态下,数据应该从共享存储中获取并仅存储在那里。
现在可以通过适当设置获取请求的 affectedStores
属性 来仅从特定商店获取数据。
但显然无法设置受影响的存储以保存托管对象上下文的更改。
问题:
我怎样才能实现仅将托管对象更改保存到持久存储之一?
我的想法:
- 可以从持久存储协调器中添加和删除持久存储,但在我看来这很复杂。是否有更简单的方法将保存定向到特定的持久性存储,因为它可以用于获取请求?
- 是否最好使用 2 个持久存储协调器,每个协调器只协调一个持久存储?
我刚刚在“更新”下的 this post 中偶然发现了我的问题的解决方案:
可以告诉托管对象上下文为所有新插入的对象分配一个保存它们的持久存储,请参阅 Apple docs.
因此,我可以重置相关上下文,并使用 assign(_:to:)
将保存定向到特定的持久存储。
设置:
我的应用程序使用自己的数据(自己的状态)或其他用户共享的数据(共享状态),并且可以在两种状态之间切换。
该应用程序使用带有 CloudKit 镜像的 Coredata:自己的数据存储在私有数据库中,共享数据存储在共享数据库中。两个数据库都自动同步到两个持久存储,私有和共享,由一个持久存储协调器协调。
如果处于自己的状态,则应从私有存储中获取数据并仅存储在那里。
或者,在共享状态下,数据应该从共享存储中获取并仅存储在那里。
现在可以通过适当设置获取请求的 affectedStores
属性 来仅从特定商店获取数据。
但显然无法设置受影响的存储以保存托管对象上下文的更改。
问题:
我怎样才能实现仅将托管对象更改保存到持久存储之一?
我的想法:
- 可以从持久存储协调器中添加和删除持久存储,但在我看来这很复杂。是否有更简单的方法将保存定向到特定的持久性存储,因为它可以用于获取请求?
- 是否最好使用 2 个持久存储协调器,每个协调器只协调一个持久存储?
我刚刚在“更新”下的 this post 中偶然发现了我的问题的解决方案:
可以告诉托管对象上下文为所有新插入的对象分配一个保存它们的持久存储,请参阅 Apple docs.
因此,我可以重置相关上下文,并使用 assign(_:to:)
将保存定向到特定的持久存储。