CoreData更新数据库保留用户条目

时间:2012-02-02 16:49:29

标签: ios sqlite core-data

首先,感谢您提供的任何帮助。

我有一个iOS利用CoreData来保留各种演示文稿,这些数据来自sqlite文件,并且没有服务器连接。

我必须能够提供应用程序更新(通过appstore),此更新可能会向数据库添加更多数据。 棘手的部分是它不能简单地覆盖当前数据库,有一些我不喜欢的用户表。

请提供我在完成此任务时应考虑的任何信息,或者非常感谢任何链接。

谢谢。

2 个答案:

答案 0 :(得分:0)

鉴于您的应用没有服务器连接,您将不得不依赖于更新的应用程序本身内的数据。我建议使用plist文件或定义自己的xml或json结构。然后,您可以读取此数据以创建/更新核心数据nsmanagedobjects。

It looks like someone in the past was using plist->coredata on SO

答案 1 :(得分:0)

您是否在用户创建的数据和发货数据之间建立了关系?

如果没有,您可能会将两个存储连接到持久性存储协调器的路径。装运的商店将是只读的。具有用户创建数据的商店将是可读写的。如果您在发货和用户创建的对象之间存在关系,也可以使用这种方法,但它更复杂,因为CoreData不管理您的跨店关系,您需要编写自己的逻辑(可行,但不是直截了当)。

如果您需要在已发货和用户创建的对象之间建立关系,您仍然可以发运CoreData商店。当应用程序第一次启动时(没有用户创建的对象),您将存储复制到Documents文件夹并使用此存储来创建CoreData堆栈。用户创建的对象将添加到此商店。一旦有了新的“已发货”对象(即应用程序包中的新商店),您就必须手动将数据存储到用户已更改的商店中。你必须能够找到     (1)需要删除的对象     (2)需要更新(更改)的对象     (3)需要添加的对象 如果您使用特殊标记标记已发送的对象,以便您可以判断它是用户创建的对象还是已发送的对象,那么这将是可行的。您还必须拥有某种ID才能分辨出新商店中的哪些对象与现有(旧)商店中的哪些对象相对应。

需要使用plist的路线。事实上,我建议反对它。您可以轻松地同时打开两个商店。要么既使用存储,要么只是将对象从一个商店迁移到另一个商店。