如何最好地将应用程序从 sqlite(使用 fmdb)迁移到 CoreData?

Posted

技术标签:

【中文标题】如何最好地将应用程序从 sqlite(使用 fmdb)迁移到 CoreData?【英文标题】:How best to migrate app from sqlite (using fmdb) to CoreData? 【发布时间】:2011-01-18 17:18:53 【问题描述】:

我使用 ios 2.0 创建了我的应用程序,首先直接使用 C 库。然后我继续使用 FMDB(对我来说更容易)。但是今天,管理数据的故障、缓存和预取已经变得太麻烦了。我很确定使用 CoreData 会使应用程序响应更快、更轻量(内存方面)。

我已准备好在 CD 中重做所有内容的漫长而艰苦的工作,但我需要迁移现有数据。我考虑过使用新对象(CDTrack、CDTrackPoint、CDSegment 等)创建一个新模型,然后将 Track、TrackPoint Segment 等对象中的现有数据移动到这个新存储中。但这真的是一个明智的想法吗?有没有比一张一张复制旧图更好的方法?

【问题讨论】:

您尝试迁移的数据是用户数据,还是应用程序随附的预填充静态数据? 是用户数据。这就是为什么我真的想在正在运行的应用程序中迁移它。如果是我的静态数据,我就不会这么谨慎了:scratch delete restart。 【参考方案1】:

你基本上是在正确的轨道上。

如果需要迁移数据,我可能会创建一个 NSOperation 用于在应用启动时运行的迁移。

根据您的应用程序,该操作可能能够在后台运行(注意 Core Data 线程规则!),使用通知与主线程 NSManagedObjectContext 通信。

如果您的应用在不迁移这些数据的情况下没有任何意义,那么您可能会在数据迁移时设置一个带有进度指示器的模态视图,让用户更好地了解他们还需要等待多长时间。

根据我们讨论的数据量,您可能会惊讶于 Core Data 和 SQLite 能够以多快的速度完成此类事情......关键是让用户了解情况,以最少的时间完成可能的时间,如果您的应用程序设计支持它,请在后台执行。确保在主线程之外完成工作以保持 UI 响应。

玩得开心!

【讨论】:

我开始做你所描述的一切,就在我说自己之前:whatif?我停了下来。鉴于你建议我完全按照我的计划去做,我认为自己并没有完全偏离轨道 ;-)

以上是关于如何最好地将应用程序从 sqlite(使用 fmdb)迁移到 CoreData?的主要内容,如果未能解决你的问题,请参考以下文章

如何最好地将一个巨大的.sqlite数据库移动到旧的低内存iOS设备上的新目录中?

如何最好地将 fb 评论从 http 移动到 https

如何最好地将使用一个 UIViewController 将所有页面作为 UIView 处理为 StoryBoarding 和 UIPageView 的图书应用程序转换?

如何最好地将 mysql 数据实现为一行 javascript 代码?

将内存中的 sqlite 数据库转换为 blob/char 数组

如何最好地将 JTidy 与 Spring servlet 容器一起使用?