我的viewDidLoad
在视图控制器中被调用两次。一次通过[UIViewController View]
,第二次通过[UINib instanciateWithOwner:Options]
。这是为什么发生?可以预防吗?viewDidLoad被调用两次
感谢
我的viewDidLoad
在视图控制器中被调用两次。一次通过[UIViewController View]
,第二次通过[UINib instanciateWithOwner:Options]
。这是为什么发生?可以预防吗?viewDidLoad被调用两次
感谢
你把viewDidLoad
内部的任何代码应能与任何问题,运行多次。如果您的代码只需要为您的控制器运行一次,请使用-awakeFromNib
。原因是因为视图控制器的视图可以卸载并加载多次。 viewDidLoad
中的代码应该只修改UI以反映当前状态。
现在我明白了,你的特定问题看起来是一个错误。请参阅Ned's answer。
您可能需要检查对象构建机制。如果只有一个参考控制器的nib文件,则不应该多次调用此方法。 (除非对象正在重建)。
我想你可能必须在ViewDidLoad idemPotent中创建你的代码。确保框架回调方法做出这个假设总是比较好的。
这是同样的问题吗?
Why is viewDidLoad called twice when the rootViewController property of UIWindow is set?
看起来它可能是在XCode中4的错误
+1它看起来就是那个bug! – Joe
有两种可能性,因此这个问题在我的iOS设备经常发生。规则#1:不要在[init]函数中调用任何与视图相关的设置,所有视图相关的设置必须在viewDidLoad和viewWillAppear中完成。
规则2:检查viewDidLoad和viewWillAppear,他们是否调用正确的超级函数?例如viewDidLoad - > super viewDidLoad等。
希望这会有所帮助。
在我的情况下,我在viewDidLoad中使用self.view(一次),同时在我的单元测试中调用viewDidLoad。这导致了两个电话。但是,当我用[testedViewController视图]替换[testedViewController viewDidLoad]时,双重调用问题消失了。
好答案。但我不确定有关ViewDidLoad会被多次调用,除非有一些隐藏的引用。但我可能是错的。 –
viewDidLoad将在需要视图时自动调用,但不在那里。如果视图最初为零,则使用'controller.view'或'[controller view]'会导致viewDidLoad被调用。如果未在instanciateWithOwner中设置视图,或者之后卸载视图,则可能是它再次被调用的原因。 – Joe