7

viewDidLoad在视图控制器中被调用了两次。一次[UIViewController View]又一次[UINib instanciateWithOwner:Options]。为什么会这样?可以预防吗?

4

6 回答 6

10

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

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

于 2011-08-16T14:21:54.000 回答
5

这是同样的问题吗?

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

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

于 2011-08-16T14:23:40.100 回答
1

您可能必须检查对象构建机制。如果只有一个 nib 文件引用了控制器,那么这个方法不应该被多次调用。(除非对象正在重建)。

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

于 2011-08-16T14:23:17.260 回答
0

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

于 2014-05-14T14:40:54.400 回答
0

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

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

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

希望这可以帮助。

于 2013-10-16T08:29:25.943 回答
0

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

于 2021-01-27T19:36:31.987 回答