两个持久存储,用于一个类的不同对象

时间:2014-05-14 10:56:43

标签: ios core-data nspersistentstore

我的申请是另一个待办事项经理。它有类Todolist,可以是本地(私人列表)或共享列表。与私有列表相关的所有数据都存储在本地(Core Data + SQLite存储)。与共享列表相关的数据必须本地和远程存储(以便所有共享列表成员都能够将其事务添加到列表中)。通过PFIncrementalStore使用Parse Cloud支持远程持久性存储。所以我的目标是将本地存储的共享列表与远程存储的待办事项同步。

这是引用Core Data Programming Guide:

  

协调器只能与一个托管对象模型关联。如果   你想要将不同的实体放入不同的商店   通过定义模型中的配置来划分模型实体   托管对象模型

这是否意味着我应该为shared-list和它的待办事项创建单独的datamodel配置?或者只是使用NSManagedObjectContext- (void)assignObject:(id)object toPersistentStore:(NSPersistentStore *)store的方法重新分配对象就足够了?

我如何看待解决方案:当我处理共享列表时,我将其分配给PFIncrementalStore,另一方面(处理私有列表)我将其分配给标准本地存储(NSSQLiteStoreType)。

我说得对吗?任何建议表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:2)

除非您的本地和远程待办事项是不同的实体类型,或者您有其他实体只应存在于其中一个持久性存储文件中,否则配置在此处没有用。当该引用引用“不同实体”时,它们表示不同的实体类型,而不是同一实体类型的不同实例。

此外,您无法使用assignObject:toPersistentStore:将对象从一个持久性存储移动到另一个持久性存储。如果您查看该方法的文档,您会发现它仅适用于“新插入的对象”。这意味着如果您创建一个与任何托管对象上下文无关的新托管对象(即在创建上下文时为上下文传递nil值的托管对象),则可以告诉NSManagedObjectContext将其插入到自身和使用特定的商店文件。至关重要的是,无法在已经属于上下文和商店的对象上使用此方法,因此您无法使用它将对象从一个商店移动到另一个商店。

要按照您的描述移动对象,您需要执行以下操作:

  1. 在目标商店中创建新实例
  2. 将所有属性从旧对象复制到新对象
  3. 删除旧的并保存新的
  4. 没有内置支持将对象从一个商店移动到另一个商店。