【问题标题】:didFinishLaunchingwithOptions is calling after awakeFromNibdidFinishLaunchingwithOptions 在 awakeFromNib 之后调用
【发布时间】:2014-06-05 12:39:31
【问题描述】:

Apple doc 说:

在显示初始视图控制器之前,您的应用委托是 调用以使您有机会配置视图控制器。

但这实际上并没有发生。

  1. 我在 Xcode 中使用 single view template 创建了项目。
  2. ViewController.m 中我添加了awakeFromNib 方法,在里面我只是NSLog(@"VC")
  3. 然后在AppDelegatedidFinishLaunchingwithOptions 我只是NSLog(@"AD")
  4. 当我运行项目时ViewController 先执行然后AppDelegate
  5. 没有故事板 didFinishLaunchingwithOptions 方法总是首先执行,我能够配置所有 ViewController 都可以使用的数据库和其他初始内容,但现在我不能这样做。
  6. ViewController.m 首先执行,我的数据库设置在 didFinishLaunchingWithOptions

出了什么问题?

【问题讨论】:

  • 一切正常。 awakeFromNib 在情节提要加载时被调用。文档声明“在初始视图控制器显示之前”。与您之前已删除的问题一样,要获得实际答案,您必须说出您实际上想要做什么,以及为什么这会导致您出现问题。您可能在 awakeFromNib 中做一些不合适的事情,但没有更多信息没人知道。
  • 我猜你正试图在 awakeFromNib 中做一些你应该在 viewDidLoad 中做的事情。
  • @jrturton 在 didFinishLaunchingWithOptions 中,我想从主捆绑数据库创建/设置/复制,在 awakeFromNib 中,我想查询和使用 ViewController.m 中的数据,但 ViewController 被提前调用。
  • AwakeFromNib 是错误的做法。要么告诉你的视图控制器事情已经从应用程序委托中准备好了,要么在 viewWillAppear / viewDidLoad 中做你的事情。
  • @jrturton 但没有故事板 didFinishLaunchingWithOptions 是第一个执行的方法

标签: ios objective-c uistoryboard appdelegate


【解决方案1】:

没有任何问题。 加载故事板时调用 awakeFromNib。文档指出“在显示初始视图控制器之前”。

你可能在 awakeFromNib 中做了一些不合适的事情,但没有更多信息没人知道

带有故事板的应用生命周期与使用 nib 略有不同。使用 nib,您可以在 didFinishLaunching 中创建并填充初始视图控制器。使用故事板,在调用didFinishLaunching 之前为您完成。然后,您可以在该方法中访问 self.window.rootViewController 以获取您的初始视图控制器。

重点仍然是awakeFromNib 不是做任何事情的好地方,比如响应正在设置的数据库或查询值。您的视图尚未加载。您应该在生命周期的后期做这些事情。

【讨论】:

  • 感谢您的精彩回复。
猜你喜欢
  • 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
相关资源
最近更新 更多