我发现应用程序启动时我的 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/