【问题标题】:ViewDidLoad runs before AppDelegate didFinishLaunchingWithOptions gets executed!ViewDidLoad 在 AppDelegate didFinishLaunchingWithOptions 被执行之前运行!
【发布时间】:2011-05-26 13:54:06
【问题描述】:

我遇到了一个奇怪的问题,即“ViewDidLoad”方法在 AppDelegate 的 didFinishLaunchingWithOptions 执行之前运行! 因为我只检查“didFinishLaunchingWithOptions”中是否存在数据库,如果数据库不存在,我的应用程序就会崩溃。在闲逛了几个小时后,我厌倦了这样做并打电话给 HEEEEELP! 如果你能这么好心,并指出我正确的方向,我的项目可能出了什么问题。我想不通(aaarggh!)

谢谢!

最好的问候 汤姆

【问题讨论】:

  • 您如何检查数据库是否存在。显示代码会有所帮助。
  • 贴一些appDidFinishLaunching的代码,如果没有创建数据库,则创建它。
  • 如果您来自后台,didFinishLaunchingWithOptions 不会运行,以防万一您不知道。
  • 我很高兴发布一些代码,但由于 appDidFinishLaunching 从未被执行,我怀疑它是否会阐明问题,因为问题出在其他地方......

标签: iphone objective-c xcode ios delegates


【解决方案1】:

viewDidLoad 可以在从 NIB 加载的 ViewController 上运行,因为这些是在调用 didFinishLaunchingWithOptions 之前加载的:

【讨论】:

  • 有没有办法预防?
【解决方案2】:

我遇到了同样的问题,在更详细地查看代码后,我发现在 xViewController 的 awakeFromNib 内部,我正在启动另一个 yViewController。所以yViewController的viewDidLoaddidFinishLaunchingWithOptions:之前运行。

基本上,初始 VC 的 awakeFromNibdidFinishLaunchingWithOptions: 之前被调用。您可能有类似的设置。调查一下。

【讨论】:

    【解决方案3】:

    如果您的数据库文件加载速度不够快;覆盖您的 AppDelegate 的 init():

    override init() {
        if filesExistBool == false {
            addDBFiles()
        }
    }
    

    【讨论】:

      【解决方案4】:

      我不相信你。

      application:didFinishLaunchingWithOptions: 中,您决定要加载哪些视图。该应用程序不会在没有您告知的情况下随机加载视图。您是先在viewDidLoad 中放置断点,然后在application:didFinishLaunchingWithOptions: 中放置第一个断点,还是只是假设application:didFinishLaunchingWithOptions: 没有被执行,因为它不起作用。

      【讨论】:

      • 如果应用程序一开始就崩溃,它最终会到达“application:didFinishWithOptions”,但是在我的代码在视图控制器“viewDidLoad”中中断后,因为没有复制数据库,它不会执行“应用程序:didFinishLaunchingWithOptions" (数据库复制发生的地方)
      • 我只是对“应用程序:didFinishWithOptions”不再以正确的顺序(如第一次)运行这一事实感到困惑,我很感兴趣你如何再次将其更改为正确的顺序......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多