在viewDidLoad方法中,我有这样的代码。当应用程序正在运行时,它没有转到另一个视图控制器,它会给我一个错误:
Warning: Attempt to present <CompleteCountryViewController: 0x7fb971779be0> on <ViewController: 0x7fb97176f3e0> whose view is not in the window hierarchy!
我能做什么,当应用程序运行时,它将转到另一个viewController?
您不应该在另一个控制器的viewDidLoad
方法中显示视图控制器,因为当转换已经发生(push、pop、present、disse)时,您无法显示视图控制器(presentally或push)。
我的建议是将代码示例中的代码移到viewDidAppear:
方法中。在这一点上,您可以确信过渡已经完成。
如果您想在另一个视图控制器的viewDidLoad
中模式化地呈现视图控制器,那么您似乎对UIViewController
的生命周期有点误解。
viewDidLoad
在一个视图控制器中被调用,因为它已经被实例化并且它的视图组件已经被加载(因此名称)。该视图控制器的视图即将显示,因此此时实例化另一个视图控制器并将其呈现在第一个视图控制器上没有多大意义。
让我给你一个两个视图控制器A
和B
的例子。
实例化A
并调用其viewDidLoad
。因此,A
即将显示!您现在在代码中所做的是在此时实例化B
,并将其显示在A
上。iOS不喜欢这样,会给你错误。
我遇到了一个问题,我试图在viewDidLoad
方法中呈现一个模态视图控制器。对我来说,解决方案是将此调用移动到viewDidAppear:
方法。
视图控制器的视图在加载时(当发送viewDidLoad
消息时)不在窗口的视图层次结构中,但在显示后(当发送了viewDidAppear
:消息时)在窗口层次结构中。