我正试图在iPhone进入睡眠状态时从视图中卸载视图控制器。我的应用程序有一个秒表,当手机进入睡眠或来电或用户关闭应用程序而不退出时,它必须继续计数。
我有所有这些功能,我正在捕捉所有开始时间和停止时间,并在重新进入秒表视图控制器时,我计算差异。一切都很美妙。当我做一些额外的测试时,我意识到我没有迎合iPhone进入睡眠模式。
所以我需要做的就是确保我的秒表是正确的,将用户带回应用程序主屏幕。我知道当应用程序进入休眠状态时会调用以下方法:
-(void)applicationWillResignActive:(UIApplication *)application
如何从我的应用代表中卸载秒表视图控制器?
----更新----
kpower,感谢您的反馈。我已经实现了以下代码:
在我的App代表中:
- (void)applicationWillResignActive:(UIApplication *)application
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"AppIsAsleep" object:nil];
}
在我的视图控制器中,我有以下内容:
-(void)viewDidLoad
{
// Add Observer.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewDidUnload:) name:@"AppIsAsleep" object:nil];
}
- (void)viewDidUnload {
//Remove the Observer.
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"AppIsAsleep" object:nil];
}
当手机进入睡眠状态时,它实际上会关闭应用程序,我做错了吗?
此致 斯蒂芬
答案 0 :(得分:1)
您可以使用通知机制。它允许您从不同的地方(不是AppDelegate)卸载视图控制器。
例如,在视图控制器的viewDidLoad
方法中添加一个观察者(不要忘记在viewDidUnload
中删除它),在AppDelegate的applicationWillResignActive:
方法中,您只需发布通知。就是这样。
<强>↓更新这里↓强>
当您收到通知时 - 您应该自行管理视图控制器的删除。并且在这里调用viewDidUnload
不是解决方案,因为在视图控制器已经卸载并且不会导致删除之后调用此方法。
如何删除?取决于视图控制器的添加方式(例如,popViewControllerAnimated
用于UINavigationController)。这里的主要思想是使对象的保留计数等于0(因为你知道这种情况会破坏一个对象) - 所以你应该发送必要的释放消息。