[英]viewDidLoad is called twice
我在视图 controller 中的viewDidLoad
被调用了两次。 一次是[UIViewController View]
,第二次是[UINib instanciateWithOwner:Options]
。 为什么会这样? 可以预防吗?
您放入viewDidLoad
中的任何代码都应该能够多次运行而不会出现任何问题。 如果您的代码只需要为您的 controller 运行一次,请使用-awakeFromNib
。 原因是因为视图controller的视图可以多次卸载加载。 viewDidLoad
内部的代码应该只修改 UI 以反映当前的 state。
现在我已经解决了这个问题,您的特定问题看起来是一个错误。 见内德的回答。
您可能需要检查 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.