viewController 如何知道应用程序何时刚刚完成启动?

Posted

技术标签:

【中文标题】viewController 如何知道应用程序何时刚刚完成启动?【英文标题】:How can a viewController know when an app did just finish launching? 【发布时间】:2012-06-22 00:00:07 【问题描述】:

我在 xcode 4.3.1 中制作了一个简单的单视图程序。我希望视图根据它是在应用程序第一次启动时加载还是在恢复时执行不同的操作。

谁能告诉我最好的方法?

appDelegate 没有对我的 viewController 的引用,所以我不确定我是否可以从我的 AppDelegate didFinishLaunchingWithOptions 方法传递一个变量。

当 ViewController 似乎没有在任何地方实例化时,AppDelegate 如何与 ViewController 通信?

谢谢!

【问题讨论】:

【参考方案1】:

您可以使用 NSNotificationCenter 知道应用程序何时进入前台,然后您可以注册单个 VC 来关心该事件。例如:

- (void)loadView 
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(applicationWillEnterForeground)
                                             name:UIApplicationWillEnterForegroundNotification
                                           object:nil];

在 loadView(或任何其他方法)期间 VC 注册。那么当app进入前台时,方法

- (void)applicationWillEnterForeground;

被调用。请记住在 dealloc 或 viewDidUnload 中取消注册。

- (void)dealloc 
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];

【讨论】:

【参考方案2】:

您可以使用 [application:didFinishLaunchingWithOptions:] 来确定您是否刚刚开始。它仅在您启动时调用一次。您可以将其与设置一些标志和 [applicationWillEnterForeground:(UIApplication *)application] 来确定您是启动还是只是返回前台。

【讨论】:

我意识到了这一点,但是如何从我的 viewController 访问这些标志?当您创建单个视图应用程序时,他们在 AppDelegate 中为您创建的 ViewController 没有引用... 在您的 [application:didFinishLaunchingWithOptions:] 方法中启动应用程序时设置静态布尔值或其他值。检查 [applicationWillEnterForeground:] 中的状态。 感谢您的帮助。我仍然很困惑。我上传了一张图片。如您所见,AppDelegate 中没有对 ViewController 的引用。如果我在应用程序委托中创建一个静态变量,ViewController viewDidLoad 方法将如何读取该变量? 使用标准 C 实践来设置 GLOBAL 变量。如果你正确地声明它,它可以被任何类在你的程序中的任何地方看到。 谢谢!我在 appDelegate 中声明了一个全局变量,然后将 AppDelegate.h 导入到 viewController 文件中。

以上是关于viewController 如何知道应用程序何时刚刚完成启动?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测自定义表格视图单元格何时离开屏幕?

检测 Viewcontroller 何时被推送

Viewcontroller 堆栈理解问题

iOS——何时创建子 ViewController 与 UIView 子类?

我应该何时从正在观察持久模型类的关闭 ViewController 类中调用 removeObserver:forKeyPath?

iOS 和 Swift:ViewController 类已定义,但何时将其创建为对象?