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

Mag*_*pie 9 iphone events cocoa-touch ipad ios

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

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

提前致谢.

更新我并不是说应用程序第一次进入前台时不会触发事件.我的意思是这个事件再也不会发生了.即使在标签之间切换或通过导航视图移动也是如此.

例:

- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   NSLog(@"viewDidAppear called");
}
Run Code Online (Sandbox Code Playgroud)

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

occ*_*lus 10

顺便说一句,该viewDidUnload方法确实是严重命名顺便说一句-这不是一个"反"对viewDidLoad,如果有一个内存不足的情况和该控制器的观点,由于不是在那个时候看到被卸载它只是调用.

(原文,没有相关的答案:)

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

为什么当应用程序从后台返回时,不会调用viewWillAppear?

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


Mag*_*pie 7

找到了.

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

我的viewWillDisappear方法辞职任何键盘如果显示,当我的应用程序进入它加载启动画面准备当应用程序重新进入前台的背景(有一些逻辑,我需要做什么来制定出重新启动应用程序的用户显示什么我可以在启动画面下执行此操作).

由于viewWillDisappear不叫当应用程序进入后台,以确保没有键盘出现在我的启动画面我打电话viewWillDisapperapplicationDidEnterBackground方法.我想这也取消了我的活动.

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

谢谢您的帮助.