iPhone viewDidAppear在加载/解除模态视图后停止触发

时间:2009-08-03 17:54:30

标签: iphone objective-c

我开始有点疯狂了。

我的iphone应用程序具有稍微复杂的视图结构,它是一个带标签的应用程序,每个选项卡上都有一个视图控制器或导航控制器。

一个选项卡的主控制器使用viewDidAppear回调来重新加载自上次显示以来已修改的任何数据,这在大多数情况下表现良好。我遇到的问题是,当我使用标准导航控制器推/弹机制导航子视图(在同一个选项卡中)时,主视图上的viewWillAppear和viewDidAppear总是在我导航回来时触发。 但是,如果我加载一个模态视图控制器然后将其关闭,则viewWillAppear会继续触发,但viewDidAppear会停止触发。

我几乎可以肯定,这与在模态控制器上手动调用这些回调的需要有关,但是我找不到关于如何正确执行此操作的参考信息。 (我只在硬件上看到这个viewDidAppear错误,在模拟器中它按照我的预期工作)

如果您需要进一步说明,请告知我并感谢您的任何意见。

2 个答案:

答案 0 :(得分:3)

是的,这是它的工作原理。最好切换到使用viewWillAppear。

这具有在重新绘制屏幕之前更新数据的附加优势。

答案 1 :(得分:0)

viewDidLoad应该用于一次性设置操作:

  • 设置标题
  • 实例化子视图,内容数组
  • 与相关视图的基础结构相关的任何其他内容

之后,使用viewWillAppear:执行与刷新数据相关的任何操作。您不必手动调用任何viewDid / viewWill方法 - 这是由UIView的内部处理。解雇模态视图控制器后,viewDidLoad不会触发,因为视图永远不会卸载。当您导航视图控制器堆栈时,viewDidLoad会激活,因为新视图需要内存,需要卸载其他视图,然后在重新出现时重新加载。