应用程序进入前景后,viewDidAppear不会再次触发

时间:2011-03-24 09:52:00

标签: iphone cocoa-touch ios ipad events

我已经在我的iPhone应用程序代码中跟踪了一个问题,但是viewDidAppear方法并不总是触发。当您启动应用程序时,事件将按预期触发。但是,如果我使用能够进行多任务处理并重新打开的手机关闭应用程序。我的viewDidAppear事件不再发生。

我的观点是从Nibs加载的,我使用viewDidUnload来清理(释放和零所有出口)。我的视图嵌套在侧面和标签栏然后导航控制器。当nib重新加载时,我看起来事件没有正确连线。我对错误/遗失的错误以及如何解决这个问题有所了解吗?

提前致谢。

更新我并不是说当应用首次进入前台时不会触发事件。我的意思是这个事件再也不会发生了。即使在标签之间切换或浏览导航视图时也是如此。

示例:

- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   NSLog(@"viewDidAppear called");
}

此代码放在两个视图中,每个视图位于不同的选项卡上。每次我在选项卡之间交换“viewDidAppear called”都会写入日志。当我关闭并重新打开应用程序并在标签之间切换时,不再发生这种情况。其他按钮事件正常启动。

2 个答案:

答案 0 :(得分:10)

顺便说一句,viewDidUnload方法确实命名为btw - 它不是viewDidLoad的'反面',只有在内存不足并且该控制器的视图被卸载时才会被调用由于当时不可见。

(原文,并非如此相关答案:)

请参阅我对这个类似问题的回答:

Why does viewWillAppear not get called when an app comes back from the background?

基本上,在将UIViewController的视图添加到应用程序的UIWindow heirarchy之后,会调用viewDidAppear。后台然后恢复应用程序不会在这方面改变您的视图,因此viewDidAppear不会被调用 - 这是正确的行为,而不是错误。查看UIViewController的API文档。

答案 1 :(得分:7)

找到它。

虽然不是编程的新手,但我是iPhone开发的新手。在研究此问题时,我发现不建议手动调用viewWillAppearviewWillDisappear方法。

如果显示,我的viewWillDisappear方法会重新签名任何键盘,当我的应用程序进入后台时,它会加载一个启动画面,以便在应用程序重新进入前景时做好准备(我需要做一些逻辑来弄清楚什么重新启动应用程序时会显示用户,我可以在启动画面下执行此操作。

当应用进入后台以确保在我的初始屏幕上没有显示键盘时,我没有调用viewWillDisappear我在viewWillDisapper方法中调用了applicationDidEnterBackground。我想这也没有注册我的活动。

通过向我的viewWillAppear方法添加applicationDidEnterForeground,我的事件再次开始触发。经验教训,我将重构这一点,所以我不会手动调用这些事件。

感谢您的帮助。