我有一个导航 Controller 。其中一个 View 在其 viewDidAppear:
中添加了自定义 subview 。我注意到,启动应用程序后第一次导航到此 View Controller 的实例时,viewDidAppear:
调用两次。如果我从堆栈中弹出此 View 并再次导航到它,则每次外观仅调用一次 viewDidAppear:
。所有后续出现都会调用 viewDidAppear:
一次。
对我来说,问题是当我第一次进入这个 View 时,我最终得到的 subview 数量是原来的两倍。我通过引入标志变量或类似变量来解决这个问题,但我想了解发生了什么以及为什么在这种情况下会得到两次调用。
最佳答案
您永远不应该依赖 -viewWillAppear:
/-viewDidAppear:
与消失变体适当平衡地调用。虽然系统 View Controller 将尽最大努力始终正确地将调用括起来,但我不知道他们是否能保证这一点,当然,当使用自定义 View Controller 时,您可能会发现可以多次调用这些调用的情况。
简而言之,您的 -viewWillAppear:
/-viewDidAppear:
方法应该是幂等的,这意味着如果 -viewDidAppear:
在一个实例中被调用两次行在你的 Controller 上,它应该表现正常。如果您想加载自定义 View ,您可能需要在 -viewDidLoad
中执行此操作,然后只需将屏幕上的内容(如果尚未加载)放入 -viewDidAppear:
.
您还可以在 -viewDidAppear:
方法中放置一个断点,以查看为什么它在第一次出现时被调用两次。
关于iphone - viewDidAppear 在同一个实例上调用两次,但仅在该类第一次从 NIB 加载时调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3199099/