我的视图控制器中的viewDidLoad
方法被调用了两次。一次是由[UIViewController View]
调用,另一次是由[UINib instanciateWithOwner:Options]
调用的。为什么会出现这种情况?可以如何避免呢?
我的视图控制器中的viewDidLoad
方法被调用了两次。一次是由[UIViewController View]
调用,另一次是由[UINib instanciateWithOwner:Options]
调用的。为什么会出现这种情况?可以如何避免呢?
viewDidLoad
中的任何代码都应该能够多次运行而没有任何问题。如果您有仅需要在控制器中运行一次的代码,请使用 -awakeFromNib
。原因是视图控制器的视图可以被多次卸载和加载。 viewDidLoad
中的代码应仅修改 UI 以反映当前状态。
现在我把这个问题解决了,你的特定问题似乎是一个 bug。请参见 Ned 的答案。
你可能需要检查对象构建机制。如果只有一个nib文件与控制器相关联,那么这个方法就不应该被多次调用(除非对象正在重新构建)。
我认为你可能需要使你的代码在ViewDidLoad中幂等。最好确保框架回调方法做出这种假设。
我的iOS设备经常出现这个问题,有两种可能性。
规则#1:不要在[init]函数中调用任何与视图相关的设置,所有与视图相关的设置必须在viewDidLoad和viewWillAppear中完成。
规则#2:检查viewDidLoad和viewWillAppear,它们是否调用了正确的super函数?例如viewDidLoad -> super viewDidLoad等。
希望这可以帮助你。
调试显示,@IBInspectable 通过故事板第二次调用了 viewDidLoad。根控制器是 UITabbarController。@IBInspectable 在故事板中设置了选项卡。不确定这是否是 UIKit 的错误,但请尝试检查此问题。如果您的项目设置正确,您永远不需要检查双重调用的 viewDidLoad。
viewDidLoad
将自动调用。使用controller.view
或[controller view]
会导致在视图最初为 nil 时调用viewDidLoad
。如果视图未在instanciateWithOwner
中设置或之后卸载,则可能是再次调用的原因。 - JoeviewDidLoad
? - mfaani