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

我是Stack Overflow的新手,已经编程了一年,所以仍然是这个东西的新手(即,请忍受我!)。 我正在升级在xcode 3中创build的旧应用程序,该应用程序使用sqlite数据库来存储用户生成的数据。 升级的应用程序需要与iCloud一起工作,所以我决定切换到核心数据(因为自己的sqlite无法与iCloud同步)。 我没有问题实现核心数据结构,但我的问题是如何让用户保留其现有的数据。

我已经看了这些主题: 如何将预先存在的sqlite文件导入到核心数据? 并需要从SQLite数据库填充核心数据 ,虽然我可以创build一个实用程序的应用程序来导入现有的数据,这是没有用的,因为没有与最初的应用程序包的现有数据,数据存储的用户。

我真的很感激任何帮助,我完全可以把自己束缚在这个问题上! 也许我更好地避免核心数据,并find另一种解决scheme来保存在iCloud中的SQLite数据?

提前致谢!

你可以使用核心数据。 创build您的核心数据模型和堆栈,并且您的迁移过程包括从您的sqlite数据库查询数据卡夹以将其插入到核心数据数据库中。

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

这里有几件事要记住:

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

这些是我现在可以咨询给你的一些东西。 如果我想到更多,我会编辑这个post。 祝你好运。