1

具体来说,我想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)。

4

3 回答 3

3

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

但是,从问题中您要尝试做什么并不清楚。显示启动图像时,您的视图控制器并不真正存在,那么您要它做什么?在加载之前,所有 UI 对象都不会出现,因此您尝试执行的任何任务都可能不属于视图控制器的职责。

于 2013-07-25T20:20:59.233 回答
1

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

此外,本指南还对应用程序启动顺序进行了相当多的解释:

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

于 2013-07-25T20:37:08.517 回答
1

启动图像的目的是通过尽快在屏幕上放置静态图像,使您的应用程序看起来比实际启动更快。只要您的启动图像看起来与您的初始视图控制器显示的任何视图完全相同,没有人会知道其中的区别。如果您希望该初始图像以某种方式进行动画处理,没问题:

  • 创建一个初始视图控制器来显示您的图像并自定义转换到您的下一个视图控制器。

  • 如果您正在显示的图像完全覆盖屏幕,您也可以使用该图像作为启动图像。否则,运行应用程序并在第一个视图控制器的视图出现时进行屏幕截图;使该屏幕截图成为您的启动图像。

  • 在您的方法中添加一些代码-application:didFinishLaunchingWithOptions:以开始从初始视图控制器到下一个视图控制器的转换。

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

于 2013-07-25T21:26:08.790 回答