Ios 如何区分调用ViewDidDisplay的时间

Ios 如何区分调用ViewDidDisplay的时间,ios,objective-c,uiviewcontroller,viewdidappear,Ios,Objective C,Uiviewcontroller,Viewdidappear,是否有一种内置方式(而不是使用我自己的标志)来区分何时调用viewdideappear,因为视图控制器被推送到导航堆栈,而不是在模式消失时 换句话说,只有当视图被推送到导航堆栈时,我才需要在视图出现时执行代码。当我执行该操作时,我将显示一个视图控制器并自动将其取消。在取消它时,viewdideappear再次被调用,进入无限循环 如何避免这种无限循环 此问题与模式的viewController有关,不涉及通过导航从viewController到viewController。如果您的目标是iOS>

是否有一种内置方式(而不是使用我自己的标志)来区分何时调用
viewdideappear
,因为视图控制器被推送到导航堆栈,而不是在模式消失时

换句话说,只有当视图被推送到导航堆栈时,我才需要在视图出现时执行代码。当我执行该操作时,我将显示一个视图控制器并自动将其取消。在取消它时,
viewdideappear
再次被调用,进入无限循环

如何避免这种无限循环


此问题与模式的
viewController
有关,不涉及通过导航从
viewController
viewController

如果您的目标是iOS>=5.0,请在ViewDidDisplay中使用此方法:

[self isMovingToParentViewController]

检查在关闭视图控制器时是否调用了
viewDidLoad
。@danypata,因为
viewDidLoad
只调用一次,并且将在第一次调用
viewDidAppear
之前调用它,检查
viewDidLoad
不是一个解决方案。@a-Live编辑为“查看”controller@danypata未调用viewDidLoad为什么不使用navigationController的委托方法来执行当前在viewDidLoad中运行的代码?这确保代码仅在推送导航堆栈时运行。isMovingToParentViewController在这两种情况下均为true!这不应该发生……除非您在同一运行循环中显示并关闭另一个视图控制器。你在这么做吗?我怎么知道是不是同一个RunLoop?如果你叫present。。。然后解雇。。。在相同的方法链中,它是相同的运行循环。如果通过定时器或单独单击触发解除,则这是一个不同的循环。