我们遇到了崩溃,幸运的是来自内部用户,所以我们能够详细检查她的手机,并重建发生了什么:她有一部非常旧且速度慢的 iPhone。当她升级到我们的最新版本时,第一次访问数据库时会触发迁移,这在她的旧手机上显然花费了很长时间。不幸的是,我们第一次 ping 数据库是在 application:didFinishLaunchingWithOptions: 中,iOS 认为我们的应用程序完成时间太长,并终止了该应用程序——在数据库迁移过程中。这意味着之后每次她尝试启动该应用程序时,数据库都会损坏并发生坏事。
显然,我们可以通过在 application:didFinishLaunchingWithOptions: 中不进行任何数据库访问来解决这个问题。但另一方面,我们曾经在使用旧手机(并且可能是一个非常完整的数据库)的用户身上看到过一次。所以我不确定这个“ bug ”是如何尿裤子的……
在 application:didFinishLaunchingWithOptions: 中访问 DB 是否被认为是糟糕的做法,我们应该在下一个可能的机会解决这个问题吗?还是这没什么大不了的,我们刚刚在这里经历了一场“完美 Storm ”?有什么想法吗?
最佳答案
如您所知,您不应该在 didfinishlaunchingwithoptions 中执行长时间运行的任务,因为它必须尽快返回。我不知道什么是限制。但是就您而言,您已经达到了极限。
因此,解决方案是在必须执行长时间运行的任务(例如大数据库迁移)时添加启动屏幕(或等待屏幕)。将迁移放在这个 ViewController 中(而不是 AppDelegate 中),那么即使在慢速设备中也不会有问题。
关于ios - 在应用程序 :didFinishLaunchingWithOptions:? 中进行数据库访问是不好的做法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29034134/