繁体   English   中英

viewDidLoad 被调用两次

[英]viewDidLoad is called twice

我在视图 controller 中的viewDidLoad被调用了两次。 一次是[UIViewController View] ,第二次是[UINib instanciateWithOwner:Options] 为什么会这样? 可以预防吗?

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

现在我已经解决了这个问题,您的特定问题看起来是一个错误。 内德的回答

这是同样的问题吗?

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

看起来这可能是 XCode 4 中的错误。

您可能需要检查 object 构建机制。 如果只有一个nib文件参考controller,那么这个方法不应该多次调用。 (除非 object 正在重建)。

我认为您可能必须在 ViewDidLoad idemPotent 中编写代码。 确保框架回调方法做出这种假设总是更好。

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

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

规则 #2:检查 viewDidLoad 和 viewWillAppear,它们是否调用了正确的超级 function? 例如 viewDidLoad -> 超级 viewDidLoad 等等。

希望这可以帮助。

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

对此进行调试表明,@IBInspectable 再次调用了 viewDidLoad。 根 controller 是一个 UITabbarController。 @IBInspectable 正在设置 storyboard 中的选项卡。 不确定这是否是 UIKit 错误,但请尝试检查。 如果您的项目设置正确,则永远不需要检查 viewDidLoad 是否有双重调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM