这是我的第一个问题,因为我在开发第一个 iOS 应用程序时遇到问题。它是数千个手电筒应用程序之一,但我正在尝试为其添加尽可能多的功能。其中之一是在应用程序进入后台或终止时保存应用程序的状态。进入前台(iOS 4 或更高版本)或重新启动后,我将从文件加载设置并重新应用它们。显然,其中一项设置是AVCaptureDevice.torchMode
。但是,我遇到了这个问题。我正在重新应用这些设置applicationDidBecomeActive
方法。这一切似乎都有效,但是当我快速点击主页按钮然后重新启动应用程序时,该应用程序将执行以下操作(我延迟了applicationDidBecomeActive
观察方法):
1.显示黑屏(加载中)
2. 执行applicationDidBecomeActive
然后打开 LED(我把延迟放在这里)
3.显示我当前的UIViewController
同时关闭 LED
只有在应用程序发送到后台后立即从后台调用应用程序后,才会发生这种情况。我知道这不是现实的用例场景,但我喜欢认为错误经常“堆积”,并且由于这种(可能)糟糕的设计,我将来可能会遇到其他问题。我绝对确定这不是我关闭 LED 的代码,因为我NSLog
每当我的代码修改AVCaptureDevice.torchMode
财产。所以,准确地说,我的问题是:
之后调用什么方法applicationDidBecomeActive
,可能与UIViewController
,这可以关闭我的手电筒吗?有没有可能的解决方案或解决方法?
根据iOS应用程序编程指南:
返回前台是您的应用程序重新启动任务的机会
当它移动到背景时它就停止了。发生的步骤
移动到前台时如图3-6所示。这
applicationWillEnterForeground:方法应该撤消任何内容
在你的 applicationDidEnterBackground: 方法中完成,并且这
applicationDidBecomeActive:方法应继续执行相同的操作
启动时的激活任务.
您是否尝试过重新应用您的设置applicationDidBecomeActive:
方法而不是applicationWillEnterForeground:
?
另一件需要考虑的事情是使用通知:
In the applicationDidBecomeActive:
or applicationDidBecomeActive:
AppDelegate 的方法,您可以告诉您的应用程序委托向您的控制器发送通知:
- (void)applicationDidBecomeActive:(UIApplication *)application {
/*
Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
*/
// Dispatch notification to controllers
[[NSNotificationCenter defaultCenter] postNotificationName: @"didBecomeActive"
object: nil
userInfo: nil];
}
一旦你有了这个,视图控制器就可以注册这些通知(例如在它们的 init 方法中),如下所示:
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(loadSettings)
name: @"didBecomeActive"
object: nil];
这样,您的控制器就会知道该应用程序刚刚变为活动状态,并且可以执行您想要的任何方法。
在此示例中,您告诉视图控制器执行loadSettings
方法,当它接收到didBecomeActive
通知(由应用程序委托发布)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)