Ios viewDidLoad被调用两次

Ios viewDidLoad被调用两次,ios,uiviewcontroller,uikit,viewdidload,viewcontroller-lifecyle,Ios,Uiviewcontroller,Uikit,Viewdidload,Viewcontroller Lifecyle,视图控制器中的MyviewDidLoad被调用两次。一次由[UIViewController View]执行,第二次由[UINib instanciateWithOwner:Options]执行。为什么会这样?可以防止吗?您在viewDidLoad中放入的任何代码都应该能够在没有任何问题的情况下运行多次。如果您有只需运行一次的代码供控制器使用。原因是视图控制器的视图可以多次卸载和加载。viewDidLoad中的代码只应修改UI以反映当前状态 现在我已经解决了这个问题,您的特定问题看起来是一个bu

视图控制器中的My
viewDidLoad
被调用两次。一次由
[UIViewController View]
执行,第二次由
[UINib instanciateWithOwner:Options]
执行。为什么会这样?可以防止吗?

您在
viewDidLoad
中放入的任何代码都应该能够在没有任何问题的情况下运行多次。如果您有只需运行一次的代码供控制器使用。原因是视图控制器的视图可以多次卸载和加载。
viewDidLoad
中的代码只应修改UI以反映当前状态


现在我已经解决了这个问题,您的特定问题看起来是一个bug。请参阅。

您放入
viewDidLoad
中的任何代码都应该能够在没有任何问题的情况下运行多次。如果您有只需运行一次的代码供控制器使用。原因是视图控制器的视图可以多次卸载和加载。
viewDidLoad
中的代码只应修改UI以反映当前状态


现在我已经解决了这个问题,您的特定问题看起来是一个bug。请参阅。

您可能需要检查对象构建机制。如果只有一个nib文件引用控制器,则不应多次调用此方法。(除非对象正在重建)


我认为您可能必须在ViewDidLoad中使代码具有幂等性。最好确保框架回调方法能够做出这样的假设。

您可能需要检查对象构建机制。如果只有一个nib文件引用控制器,则不应多次调用此方法。(除非对象正在重建)


我认为您可能必须在ViewDidLoad中使代码具有幂等性。最好确保框架回调方法能够做出这样的假设。

这是同一个问题吗


看起来这可能是XCode 4中的一个bug。

这是同一个问题吗


看起来这可能是XCode 4中的一个bug。

有两种可能,我的iOS设备中经常出现此问题

规则#1:不要在[init]函数中调用任何与视图相关的设置,所有与视图相关的设置都必须在viewDidLoad中完成,并且ViewWillDisplay将出现

规则2:检查viewDidLoad和ViewWillDisplay,它们调用的是正确的超级函数吗?例如viewDidLoad->super viewDidLoad等等


希望这能有所帮助。

有两种可能,我的iOS设备经常出现此问题

规则#1:不要在[init]函数中调用任何与视图相关的设置,所有与视图相关的设置都必须在viewDidLoad中完成,并且ViewWillDisplay将出现

规则2:检查viewDidLoad和ViewWillDisplay,它们调用的是正确的超级函数吗?例如viewDidLoad->super viewDidLoad等等


希望这能有所帮助。

在我的例子中,我在单元测试中调用viewDidLoad时在viewDidLoad中使用了self.view(一次)。这导致了两个电话。但是,当我将[testedViewController viewDidLoad]替换为[testedViewController view]时,双重调用问题消失了。

在我的情况下,在单元测试中调用viewDidLoad时,我在viewDidLoad中使用了self.view(一次)。这导致了两个电话。但是,当我将[testedViewController viewDidLoad]替换为[testedViewController view]时,双重调用问题消失了。

调试表明@IBInspectable再次调用了viewDidLoad。根控制器是一个UITabbarController@IBInspectable正在设置情节提要中的选项卡。不确定这是否是UIKit错误,但请尝试检查此错误。如果项目设置正确,则不需要检查viewDidLoad是否有双重调用。

调试表明@IBInspectable第二次调用了viewDidLoad。根控制器是一个UITabbarController@IBInspectable正在设置情节提要中的选项卡。不确定这是否是UIKit错误,但请尝试检查此错误。如果项目设置正确,则不需要检查viewDidLoad是否有重复调用。

回答得好。但是我不确定ViewDidLoad是否会被多次调用,除非有一些隐藏的引用。但我可能错了。只要需要视图,但不需要,就会自动调用viewDidLoad。使用
controller.view
[controller view]
将导致在视图最初为零时调用viewDidLoad。如果视图未在instanciateWithOwner中设置或随后卸载,则可能是再次调用该视图的原因。什么UI行为会触发对
viewDidLoad
的额外调用?回答不错。但是我不确定ViewDidLoad是否会被多次调用,除非有一些隐藏的引用。但我可能错了。只要需要视图,但不需要,就会自动调用viewDidLoad。使用
controller.view
[controller view]
将导致在视图最初为零时调用viewDidLoad。如果视图未在instanciateWithOwner中设置,或之后未卸载,则可能是再次调用该视图的原因。什么UI行为会触发对
viewDidLoad
的额外调用?