在应用程序升级时,将存储在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。 祝你好运。
- 如何引用Today View Widget中的AppDelegate?
- 迁移可以在没有多个数据模型版本的情况下完成。 欢呼?
- 如何获取PHAsset的URL?
- 关于Swift核心数据的指导3
- 在应用程序运行时replace核心数据sqlite文件,数据不会更新
- performBlock:和performBlockAndWait之间的行为差异:?
- 从CoreData中删除条目后如何处理包含CoreData Entry的NSMutableArray,显示为“<fault>”
- ios – 使用线程和核心数据时的错误(objective-c)
- 应用程序在创buildCoredata的managedObjectModel时崩溃