链接到viewDidLoad方法中的另一个ViewController

时间:2014-10-10 07:51:32

标签: ios objective-c viewdidload

在viewDidLoad方法中我有code。 当应用程序运行时,它不会转到另一个viewController,它会给我一个错误:

Warning: Attempt to present <CompleteCountryViewController: 0x7fb971779be0> on <ViewController: 0x7fb97176f3e0> whose view is not in the window hierarchy!

我能做什么,当运行它的应用程序将转到另一个viewController?

3 个答案:

答案 0 :(得分:2)

您不应在另一个控制器的viewDidLoad方法中显示视图控制器,因为在转换已经发生时(推,弹出,显示,关闭),您无法显示视图控制器(呈现模态或推送)。

我的建议是将代码示例中的代码移动到viewDidAppear:方法。此时,您确定已完成转换。

答案 1 :(得分:1)

如果您想在另一个UIViewController内部模拟呈现视图控制器,您似乎对viewDidLoad的生命周期有轻微的误解。

viewDidLoad在实例化之后在一个视图控制器中被调用,并且其视图组件已被加载(因此名称)。该视图控制器的视图即将显示,因此在此时实例化另一个视图控制器并将其呈现在第一个视图控制器上没有多大意义。

让我举两个视图控制器AB的示例。

您实例化A并调用其viewDidLoad。所以,A即将展示!您现在在代码中执行的操作是在此时实例化B并在A上显示它。 iOS不是那样的,会给你错误。

答案 2 :(得分:0)

我遇到了一个问题,我试图在viewDidLoad方法中呈现模态视图控制器。我的解决方案是将此调用移至viewDidAppear:方法。

视图控制器的视图不在窗口的视图层次结构中,在它已加载的位置(发送viewDidLoad消息时),但它在窗口层次结构中之后它已被呈现(当发送viewDidAppear:消息时)。