Bji*_*nse 6 core-data core-data-migration ios
我已经看到我的iPad上的4Gb数据库在应用程序启动时成功进行核心数据迁移需要几分钟时间.现在突然,一些用户在安装新版本后报告崩溃,并且应用程序被踢出了:无法及时启动错误.
我刚刚通过恢复旧数据库进行了测试,我确信核心数据迁移可能会超过10秒.
但是其他人担心它不应该并且尝试将它带到后台,或者至少在发布时运行循环:
这与其他条件有什么关系,例如连接到电源?或者电池电量超过50%?
更新:我通过启动设备上的应用程序(拔掉插头)而不是调试来重现崩溃.然后我尝试在连接USB的设备上启动应用程序:崩溃.然后通过调试器启动应用程序:没有崩溃(迁移大约需要4分钟.)
额外信息:我只有企业用户(大约75个),他们都有4.5Gb的数据库.有些用户升级没问题,有些用户有.如果成功,升级都需要几分钟.崩溃总是在20秒后发生.(如果再次尝试使用这些设备,它们会继续崩溃).
我按照建议将迁移放在了运行循环之外,但我仍然想知道为什么旧方法在某些设备上运行而在其他设备上运行.所有用户都在iOS 7上.
这是常见的发布问题.核心数据迁移可能需要0到N的任何时间,具体取决于模型的复杂性,数据量和迁移类型.
理想情况下,您不应该在-applicationDidFinish...方法中创建Core Data堆栈,迁移是其中一个原因.
我的建议是重新启动你的启动,以便在堆栈初始化之前显示一些内容.这可能只是视图中的默认图像.然后,当Core Data堆栈初始化时,您可以切换到完整视图控制器堆栈.
我还建议稍微进一步,以便您可以告诉用户迁移正在进行中,我会进一步将迁移放在后台队列中,以便您可以在迁移发生时更新UI.
最后,如果您正在进行大量迁移,我会考虑进行轻量级迁移.轻量级迁移以及其他好处要快得多.
这并不是一个不在后台线程上运行迁移的规则,但它是一个建议,因为如果您在后台线程上运行并且您的应用程序开始运行,则不能保证您的核心数据堆栈不会接触。
您可以将此迁移从 didFinishLaunching 中取出,但请确保堆栈不受影响。您可以通过一些检查来处理此问题,例如放置一个viewController带有应用程序正在更新消息的消息,该消息不允许用户执行任何操作,同时您可以执行后台迁移。迁移过程完成后,您可以简单地关闭将viewController用户带回家的操作viewController。
当您的应用程序在 iOS 平台上运行时,您无法保证所有事情,例如有时如果本机应用程序需要更多内存,那么内存将从您的应用程序配额中切断,并可能导致一些连线杀死。
| 归档时间: |
|
| 查看次数: |
1062 次 |
| 最近记录: |