1

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

这是核心数据编程指南的引用:

一个协调器只能与一个托管对象模型相关联。如果要将不同的实体放入不同的存储中,则必须通过在托管对象模型中定义配置来划分模型实体

这是否意味着我应该为共享列表创建单独的数据模型配置并且它是待办事项?或者简单地使用 NSManagedObjectContext- 的方法重新分配对象(void)assignObject:(id)object toPersistentStore:(NSPersistentStore *)store就足够了?

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

我做对了吗?任何建议表示赞赏。谢谢你。

4

1 回答 1

2

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

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

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

  1. 在目标存储中创建一个新实例
  2. 将旧对象的所有属性复制到新对象
  3. 删除旧的并保存新的

没有内置支持将对象从一个商店移动到另一个商店。

于 2014-05-14T16:34:33.083 回答