为什么 self.navigationController 在 viewDidLoad 中为空



我知道有很多类似的问题,但我找不到专门解决这个问题的问题。

为什么self.navigationControllerviewDidLoad中调用时为 null,而从外部调用时viewDidLoad是正确的?

这是我从NSLog(@"%@",self.navigationController);输出 第一个是在viewDidLoad中调用的,第二个我使用调用NSLog(@"%@",self.navigationController);的方法向接口添加一个按钮:

NavApp[31524:11003] (null)
NavApp[31524:11003] <UINavigationController: 0x6e21190>

我知道这种行为必须有一些简单的解释,我只是好奇它是什么。 谢谢!

视图

控制器的视图在您首次访问该控制器上的-view方法/属性时加载。加载视图后,将调用 viewDidLoad 方法。这是非常简单的。您还必须记住,如果在视图不在屏幕时收到内存警告,则可以多次加载/卸载视图。

因此viewDidLoad并不意味着您的视图控制器已插入导航控制器。在将视图控制器推送到导航控制器的过程中,将访问和加载其view,但这将在整个推送完成之前发生。因此,在更新navigationController属性之前,viewDidLoad显然被调用。

您还必须考虑,在将视图控制器推送到导航控制器之前,代码的其他部分可能正在访问视图控制器的视图。

所以viewDidLoad做你正在做的事情是错误的地方。您可能希望使用类似于 viewDidAppear: 的方法,以便知道视图控制器的视图在调用时是视图层次结构的一部分。

最新更新