将应用程序升级中存储在sqlite中的用户数据迁移到核心数据

时间:2012-09-21 13:29:37

标签: ios core-data

我是Stack Overflow的新手,并且已经编程了一年,所以仍然是这个东西的新手(即,请耐心等待我!)。我正在升级在xcode 3中创建的旧应用程序,该应用程序使用sqlite数据库来存储用户生成的数据。升级后的应用程序需要与iCloud一起使用,因此我决定切换到Core Data(因为sqlite本身无法与iCloud同步)。我在实现核心数据结构方面没有问题,但问题在于如何允许用户保留现有数据。

我已经按照以下几行查看了主题:How to import a pre-existing sqlite file into Core Data?Need To Populate Core Data From SQLite Database,虽然我可以创建一个实用程序来导入现有数据,但这没有用,因为没有现有数据初始应用程序包,数据由用户存储。

我真的很感激我能得到的任何帮助,完全把自己捆绑在一起!也许我最好完全避开核心数据并找到另一种解决方案来保存iCloud中的sqlite数据?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以使用核心数据。创建核心数据模型和堆栈,迁移过程包括查询sqlite数据库中的数据以将其插入核心数据数据库。

假设您的sqlite中有三个表。人,车辆和财产。您将在核心数据模式中创建等效实体,然后您必须从这些表中查询信息以将其插入核心数据中。您需要熟悉如何将数据插入核心数据数据库,以及如何在多线程环境中使用它(以避免在迁移过程中锁定应用程序)。

以下是一些需要注意的事项:

  • 尝试以块的形式保存。不要将所有内容加载到内存中,而且还必须避免对NSManagedObjectContext实例进行大量的保存调用。每个对上下文的保存调用都是IO。根据您的数据使用情况平衡IO和内存。
  • 索引您可以编入索引的现有实体的属性。这将有助于您建立关系(如果有的话)
  • 在开始迁移之前询问系统的时间。使用UIApplication的beginBackgroundTaskWithExpirationHandler:以确保有足够的时间从系统继续迁移(如果用户将应用程序发送到后台)。
  • 不要打扰清理sqlite数据库。完成后删除数据库文件。

这些是我现在可以给你建议的一些事情。如果我想到更多,我会编辑这篇文章。祝你好运。