ios - 在应用程序 :didFinishLaunchingWithOptions:? 中进行数据库访问是不好的做法吗

标签 ios database

我们遇到了崩溃,幸运的是来自内部用户,所以我们能够详细检查她的手机,并重建发生了什么:她有一部非常旧且速度慢的 iPhone。当她升级到我们的最新版本时,第一次访问数据库时会触发迁移,这在她的旧手机上显然花费了很长时间。不幸的是,我们第一次 ping 数据库是在 application:didFinishLaunchingWithOptions: 中,iOS 认为我们的应用程序完成时间太长,并终止了该应用程序——在数据库迁移过程中。这意味着之后每次她尝试启动该应用程序时,数据库都会损坏并发生坏事。

显然,我们可以通过在 application:didFinishLaunchingWithOptions: 中不进行任何数据库访问来解决这个问题。但另一方面,我们曾经在使用旧手机(并且可能是一个非常完整的数据库)的用户身上看到过一次。所以我不确定这个“ bug ”是如何尿裤子的……

在 application:didFinishLaunchingWithOptions: 中访问 DB 是否被认为是糟糕的做法,我们应该在下一个可能的机会解决这个问题吗?还是这没什么大不了的,我们刚刚在这里经历了一场“完美 Storm ”?有什么想法吗?

最佳答案

如您所知,您不应该在 didfinishlaunchingwithoptions 中执行长时间运行的任务,因为它必须尽快返回。我不知道什么是限制。但是就您而言,您已经达到了极限。

因此,解决方案是在必须执行长时间运行的任务(例如大数据库迁移)时添加启动屏幕(或等待屏幕)。将迁移放在这个 ViewController 中(而不是 AppDelegate 中),那么即使在慢速设备中也不会有问题。

关于ios - 在应用程序 :didFinishLaunchingWithOptions:? 中进行数据库访问是不好的做法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29034134/

相关文章:

c# - 从 Orchard CMS 的仪表板添加数据记录

mysql - 如何从三个不同的表中获取列?

sql - 使用别名表选择同一列两次

ios - 具有相关 Objective-C Pod 的 Swift Pod 的桥接头?

ios - 如何拍摄模糊的照片(例如从 iPad 2 拍摄的照片)并使用 iOS API 对其进行锐化?

ios - 第一个 UITableViewCell 应该为 UITableViewController 中的静态 UITableView 修复

mysql - 通过 MySQL 中的列纠正了不正确的时区结果?

database - skype main.db - 聊天和对话之间的区别

ios - 如何在 Swift 上将 HTML 代码加载到 WebView

iphone - 实时格式化美元金额