ios - 核心数据迁移需要多长时间启动?

标签 ios core-data core-data-migration

我发现应用程序启动时我的 iPad 上的 4Gb 数据库的核心数据迁移成功需要几分钟。 现在突然间,一些用户在安装新版本后报告崩溃,并且应用程序被踢出:无法及时启动错误。

我刚刚通过恢复旧数据库再次进行了测试,我确信核心数据迁移可能需要超过 10 秒的时间。

但其他人担心它不应该并尝试将其置于后台,或者至少在启动时将其置于运行循环之外:

iPhone app launch times and Core Data migration

这与其他条件有什么关系吗?连接到电源?或者电池电量超过 50%?

更新:我通过在设备上(拔掉电源)启动应用程序而不是调试来重现崩溃。 然后我尝试在连接了 USB 的设备上启动应用程序:崩溃。 然后通过调试器启动应用程序:没有崩溃(迁移大约需要 4 分钟。)

额外信息:我只有企业用户(大约 75 个),他们都有一个 4.5Gb 的数据库。有些用户升级没有问题,有些则没有。如果成功,升级都需要几分钟。崩溃总是在 20 秒后发生。 (如果您在这些设备上再次尝试,它们会不断崩溃)。

我按照建议将迁移置于运行循环之外,但我仍然想知道为什么旧方法适用于某些设备而不适用于其他设备。所有用户都在 iOS 7 上。

最佳答案

这是一个常见的启动问题。核心数据迁移可能需要任意时间,从 0 到 N,具体取决于模型的复杂性和数据量以及发生的迁移类型。

理想情况下,您不应该在 -applicationDidFinish... 方法中创建您的 Core Data 堆栈,迁移是原因之一。

我的建议是重新启动,以便在堆栈初始化之前显示一些内容。这可能只是您在 View 中的默认图像。然后,当核心数据堆栈初始化后,您可以切换到全 View Controller 堆栈。

我还建议更进一步,以便您可以告诉用户迁移正在进行中,我会进一步将迁移放在后台队列中,以便您可以在迁移发生时更新 UI。

最后,如果您正在进行大量迁移,我会考虑进行轻量级迁移。轻量级迁移速度更快,还有其他好处。

关于ios - 核心数据迁移需要多长时间启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21234846/

相关文章:

ios - NSManagedObject 的描述显示值,但访问它们显示 NaN?

xcode - iOS 7 中的 CoreData 迁移

ios - 如何以编程方式设置 ImageView 的方向

ios - SwiftUI - 使用上下文菜单删除列表中的行 - UI 故障

ios - presentViewController 在 Swift 中不工作

iphone - 托管对象之外的 NSManagedObject 子类作为普通对象

ios - 属性映射未正确关联。为什么?

iphone - Xcode - 将网络错误警报代码添加到我的应用程序中?

ios - UIPrintPageRenderer 不使用 UIMarkupTextPrintFormatter 绘制任何内容

ios4 - 我的应用程序崩溃并产生 'NSUnknownKeyException'