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

发布于 2024-10-12 14:49:24 字数 305 浏览 2 评论 0原文

我使用 iOS 2.0 创建了我的应用程序,首先直接使用 C 库。然后我开始使用 FMDB(对我来说容易多了)。但如今,管理数据的故障、缓存和预取已经变得非常麻烦。我非常确定使用 CoreData 将使应用程序响应更快且更轻(内存方面)。

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

I created my App with iOS 2.0, first using the C library directly. Then I moved on to using FMDB (much easier on me). But today, it has become too much of a hassle to manage faulting, caching and prefetching of data. I'm pretty sure that using CoreData would make the app more responsive and lighter (memory-wise).

I'm prepared to go through a long and hard work redoing everything in CD, but I need to migrate existing data. I've considered creating a new model with new objects (CDTrack, CDTrackPoint, CDSegment etc) and then move the existing data that's in objects such as Track, TrackPoint Segment to this new store. But is it really a wise idea? Are there better ways to do it than duplicating the old graph one by one?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

め七分饶幸 2024-10-19 14:49:24

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

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

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

如果您的应用程序在没有迁移此数据的情况下没有任何意义,也许您可​​以在数据迁移时设置带有进度指示器的模式视图,让用户更好地了解他们还需要等待多长时间。

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

玩得开心!

You're basically on the right track.

What I would probably do is to create an NSOperation for migration that runs when the app starts, if the data needs to be migrated.

Depending on your application, that operation might be able to run in the background (be mindful of Core Data threading rules!), communicating with a main thread NSManagedObjectContext using notifications.

If your app doesn't make any sense without this data migrated, maybe you put up a modal view with a progress indicator while the data is migrating, giving the user a better idea of how long they have left to wait.

Depending on how much data we're talking about, you might be surprised at how quickly Core Data and SQLite can do this sort of thing... The key is to keep the user informed, do it in the minimum amount of time possible and if your application design supports it, do it in the background. Make sure to do the work off the main thread to keep the UI responsive.

Have fun!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文