2

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

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

我真的很感激我能得到的任何帮助,我已经完全把自己绑在了一个大结上!也许我最好完全避免核心数据并找到另一种将sqlite数据保存在iCloud中的解决方案?

提前致谢!

4

1 回答 1

2

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

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

这里有几件事要记住:

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

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

于 2012-09-22T06:14:46.253 回答