viewDidLoad被调用两次



我的viewDidLoad在视图控制器被调用两次。一次是[UIViewController View],第二次是[UINib instanciateWithOwner:Options]。为什么会发生这种情况?可以预防吗?

您放入viewDidLoad中的任何代码都应该能够运行多次而不会出现任何问题。如果您的代码只需要为控制器运行一次,请使用-awakeFromNib。原因是视图控制器的视图可以被卸载和加载多次。viewDidLoad内部的代码应该只修改UI以反映当前状态。

现在我把它弄清楚了,你的问题看起来是个bug。请看Ned的回答

这是同一个问题吗?

为什么viewDidLoad调用两次当UIWindow的rootViewController属性设置?

看起来可能是XCode 4的bug

您可能必须检查对象构建机制。如果只有一个nib文件引用了控制器,那么这个方法不应该被多次调用。(除非对象正在重建)。

我认为你可能不得不使你的代码在ViewDidLoad内幂等。确保框架回调方法做了这个假设总是更好的。

有两种可能,因此这个问题经常在我的iOS设备上发生。

规则1:不要在[init]函数中调用任何与视图相关的设置,所有与视图相关的设置必须在viewDidLoad和viewWillAppear中完成。

规则#2:检查viewDidLoad和viewWillAppear,他们是否调用正确的超函数?例如viewDidLoad -> super viewDidLoad等等

在我的例子中,我使用self。在我的单元测试中调用viewDidLoad时,在viewDidLoad中查看(一次)。这导致了两次通话。然而,当我用[testedViewController view]代替[testedViewController viewDidLoad]时,双重调用问题就消失了。

调试显示viewDidLoad被@IBInspectable第二次调用。根控制器是一个UITabbarController。@IBInspectable在storyboard中设置标签。不确定这是否是一个UIKit错误,但尝试检查这个。如果你的项目设置正确,你不需要检查viewDidLoad是否有重复调用。

最新更新