Ios UIViewController是否存在

Ios UIViewController是否存在,ios,objective-c,uiview,uiviewcontroller,Ios,Objective C,Uiview,Uiviewcontroller,我正在尝试呈现一个带有UIView的UIViewController 下面是我在viewDidLoad方法中尝试的代码 //create the view controller UIViewController *controller = [[UIViewController alloc] init]; UIView *view = [[UIView alloc] init]; view.backgroundColor = [UIColor whiteColor]; controller.vi

我正在尝试呈现一个带有
UIView
UIViewController

下面是我在
viewDidLoad
方法中尝试的代码

//create the view controller
UIViewController *controller = [[UIViewController alloc] init];
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor whiteColor];

controller.view = view;

//show the view
[self presentViewController:controller animated:YES completion:nil];
当我运行应用程序时,它会给我以下错误

Warning: Attempt to present <UIViewController: 0x751fcd0> on <ViewController: 0x751d7a0> whose view is not in the window hierarchy!
警告:尝试显示其视图不在窗口层次结构中的对象!
这意味着什么?我错在哪里?它不应该显示一个白色视图吗?或者我理解错了吗


谢谢。

解决方案是将我的代码移动到
viewdideappear
方法


我假设
视图控制器的视图
在加载时不在窗口层次结构中(当发送
viewDidLoad
消息时),但在显示后它在窗口层次结构中(当
ViewDidDisplay
消息发送时).

解决方案是将我的代码移动到
viewdide
方法


我假设
视图控制器的视图
在加载时不在窗口层次结构中(当发送
viewDidLoad
消息时),但在显示后它在窗口层次结构中(当
ViewDidDisplay
消息发送时).

如果从“viewDidLoad:”调用
presentViewController:animated:completion
,它将不起作用。这就是为什么:

用于定义演示区域的屏幕区域由演示上下文确定。默认情况下,表示上下文由根视图控制器提供,其框架用于定义表示上下文的框架。但是,呈现视图控制器或视图控制器层次结构中的任何其他祖先可以选择提供呈现上下文。在这种情况下,当另一个视图控制器提供表示上下文时,将使用其帧来确定表示视图的帧。这种灵活性允许您将模式显示限制在屏幕的较小部分,从而使其他内容可见


在显示视图控制器的
viewdiload
框架中,尚未设置。这就是为什么只有在屏幕上显示控制器时才显示下一个控制器。

如果您从“viewDidLoad:”调用
presentViewController:animated:completion
,它将不起作用。这就是为什么:

用于定义演示区域的屏幕区域由演示上下文确定。默认情况下,表示上下文由根视图控制器提供,其框架用于定义表示上下文的框架。但是,呈现视图控制器或视图控制器层次结构中的任何其他祖先可以选择提供呈现上下文。在这种情况下,当另一个视图控制器提供表示上下文时,将使用其帧来确定表示视图的帧。这种灵活性允许您将模式显示限制在屏幕的较小部分,从而使其他内容可见

在显示视图控制器的
viewdiload
框架中,尚未设置。这就是为什么只有在屏幕上显示控制器时才显示下一个控制器的原因