我如何保证在执行FinishLaunchingWithOptions之前在视图控制器中注册通知



具体来说,我想在didFinishLaunchingWithOptions发布通知之前,在我的主视图控制器中注册一个通知,这样我就可以在"splash"(原谅我的Ob-C书呆子,忘记了它的真正名称)屏幕上执行任务,而不必执行不祥的

[[[[[[UIApplication sharedApplication] delegate] window] rootViewController] topViewController] functionIwantToCallOnceAtTheStart];

旁注:我喜欢有一个"全球首发哨声"的想法,为什么这不是默认的?

记录didFinishLaunchingWithOptions和根视图控制器的委托方法导致

2013-07-25 02:02:46.532 Tests[918:c07] awakeFromNib
2013-07-25 02:02:46.535 Tests[918:c07] didFinishLaunchingWithOptions
2013-07-25 02:02:46.538 Tests[918:c07] viewDidLoad
2013-07-25 02:02:46.539 Tests[918:c07] viewWillAppear
2013-07-25 02:02:46.540 Tests[918:c07] viewWillLayoutSubviews
2013-07-25 02:02:46.543 Tests[918:c07] viewDidLayoutSubviews
2013-07-25 02:02:46.544 Tests[918:c07] viewWillLayoutSubviews
2013-07-25 02:02:46.545 Tests[918:c07] viewDidLayoutSubviews
2013-07-25 02:02:46.549 Tests[918:c07] viewDidAppear

但是否可以保证awakeFromNib总是在didFinishLaunchingWithOptions之前出现,并且在所有iOS设备/版本上都会出现?

这个问题有一个有用的答案,但我的项目使用的是故事板,我不确定用故事板手动设置rootViewController的含义。

编辑

我最初问这个问题是因为我想把发射图像动画化。我意识到有更好的方法可以做到这一点,但我仍然希望在应用程序启动后立即使用"应用程序启动"通知启动网络请求来填充我的主视图控制器(UITableViewController)。

awakeFromNib保证在调用applicationDidFinishLaunching之前在情节提要的初始视图控制器上调用。从笔尖装载是发射的一部分。

然而,从这个问题中还不清楚你想做什么。当显示启动图像时,你的视图控制器并不在那里,那么你要求它做什么?在加载之前,任何UI对象都不会出现,因此您尝试执行的任何任务都可能不属于视图控制器的责任。

如果您真的想运行一些代码,可以打开主类。它在您的项目的支持文件下。

此外,本指南对应用程序启动顺序进行了大量解释:

http://oleb.net/blog/2012/02/app-launch-sequence-ios-revisited/

启动图像的目的是通过尽快在屏幕上显示静态图像,使您的应用程序看起来比实际启动更快。只要你的启动图像看起来和你的初始视图控制器显示的视图完全一样,就没有人知道区别。如果你想让初始图像以某种方式动画化,没问题:

  • 创建一个初始视图控制器,用于显示图像并自定义过渡到下一个视图控制器。

  • 如果您显示的图像正好覆盖屏幕,您也可以将该图像用作启动图像。否则,当第一个视图控制器的视图出现时,运行应用程序并进行屏幕捕获;让屏幕截图成为你的发布会图片。

  • -application:didFinishLaunchingWithOptions:方法中放入一些代码,开始从初始视图控制器到下一个视图控制器的转换。

应该这样做。记住,启动映像是一种实现细节——用户不应该意识到它是一个单独的东西,所以很自然地将你试图做的事情作为视图控制器转换,而不是摆弄启动映像本身。

最新更新