Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone ViewDidAspect在加载/取消模式视图后停止启动_Iphone_Objective C - Fatal编程技术网

iPhone ViewDidAspect在加载/取消模式视图后停止启动

iPhone ViewDidAspect在加载/取消模式视图后停止启动,iphone,objective-c,Iphone,Objective C,我开始有点疯狂了 我有一个有点复杂视图结构的iphone应用程序,它是一个选项卡式应用程序,每个选项卡上都有一个视图控制器或导航控制器 一个选项卡的主控制器使用ViewDidAspect回调来重新加载自上次显示以来已修改的任何数据,在大多数情况下,这种行为都很正常。我遇到的问题是,当我使用标准的导航控制器推/弹出机制在子视图(在同一选项卡内)中导航时,主视图上的视图将显示,并且当我导航回主视图时,始终会触发ViewDidDisplay。 但是,如果加载一个模态视图控制器,然后将其关闭,则View

我开始有点疯狂了

我有一个有点复杂视图结构的iphone应用程序,它是一个选项卡式应用程序,每个选项卡上都有一个视图控制器或导航控制器

一个选项卡的主控制器使用ViewDidAspect回调来重新加载自上次显示以来已修改的任何数据,在大多数情况下,这种行为都很正常。我遇到的问题是,当我使用标准的导航控制器推/弹出机制在子视图(在同一选项卡内)中导航时,主视图上的视图将显示,并且当我导航回主视图时,始终会触发ViewDidDisplay。 但是,如果加载一个模态视图控制器,然后将其关闭,则ViewDisplay将继续启动,但ViewDidDisplay将停止启动

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


如果您需要进一步的澄清,请让我知道,并感谢您的任何意见。

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


这还具有在重新绘制屏幕之前更新数据的额外优势。

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

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

之后,使用viewwillappease:执行与刷新数据相关的任何操作。您不必手动调用任何viewDid/viewWill方法,这是由UIView的内部处理的。关闭模式视图控制器后,viewDidLoad不会激发,因为视图很可能从未卸载。viewDidLoad在导航视图控制器堆栈时可以正常启动,因为新视图需要内存,需要卸载其他视图,然后当它们再次出现时重新加载。

我实际上在相当长的一段时间内使用ViewWillDisplay进行所有这些类型的操作,但已将其更改为使用ViewDidDisplay,因为在重新加载视图后与之前相比,通过更新数据,UI的响应性大大提高。这很有趣!到目前为止,在我的应用程序中,他们对使用ViewWillDisplay的反应更灵敏,使用ViewDidDisplay让我的应用程序感觉很慢,因为只有在视图滑入完成后,表格才被填满。(也就是说,加载这些表似乎花了一些时间)问题不是关于viewDidLoad或一次性设置操作。