Ios 根视图控制器';s视图不在窗口层次结构中

Ios 根视图控制器';s视图不在窗口层次结构中,ios,objective-c,model-view-controller,uiview-hierarchy,Ios,Objective C,Model View Controller,Uiview Hierarchy,我已经编写了一个登录页面,在我的应用程序委托中(在方法应用程序:didFinishLaunchingWithOptions:)将其设置为我的根视图控制器 [self.window setRootViewController:vc]; 其中vc是my HomeVC的实例化。 此视图可以正确加载。我可以输入登录所需的所有数据,但只要我尝试加载另一个视图,我就会得到 Warning: Attempt to present <RegisterVC: 0x7d07f520> on

我已经编写了一个登录页面,在我的应用程序委托中(在方法应用程序:didFinishLaunchingWithOptions:)将其设置为我的根视图控制器

[self.window setRootViewController:vc];
其中vc是my HomeVC的实例化。
此视图可以正确加载。我可以输入登录所需的所有数据,但只要我尝试加载另一个视图,我就会得到

Warning: Attempt to present <RegisterVC: 0x7d07f520> on 
         <HomeVC: 0x7d374830> whose view is not in the window hierarchy!
但是,正如我所怀疑的,它只返回了当前的视图控制器,它也是根视图控制器。它甚至从未进入while循环

我无法理解我试图从中调用的视图控制器如何不在层次结构上,因为它不仅显示正确,而且是层次结构上唯一的视图

编辑1:我将包括AppDelegate应用程序:didFinishLaunchingWithOptions:method的部分,在这里我创建并添加VC和导航VC

    UIViewController *vc = (HomeVC *)[[HomeVC alloc] initWithNibName:NSStringFromClass([HomeVC class]) bundle:nil];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:vc];
    [self.navigationController setNavigationBarHidden:YES];

    [self.window setRootViewController:vc];
    //^^^This is the line I'm most suspicious of, is that correct?^^^
    [self.window setBackgroundColor:[UIColor colorWithHexString:kDefaultBackgroundColor]];
    [self.window makeKeyAndVisible];

您可以获取窗口的根视图控制器,它应该是导航控制器,然后获取其顶视图控制器

尝试这样做:如果您确定存在viewController.presentedViewController,则将IncludeModel作为“是”发送

- (UIViewController *)topmostViewControllerFrom:(UIViewController *)viewController
                               includeModal:(BOOL)includeModal
{
    if ([viewController respondsToSelector:@selector(selectedViewController)])
    return [self topmostViewControllerFrom:[(id)viewController selectedViewController]
                              includeModal:includeModal];

    if (includeModal && viewController.presentedViewController)
    return [self topmostViewControllerFrom:viewController.presentedViewController
                              includeModal:includeModal];

    if ([viewController respondsToSelector:@selector(topViewController)])
    return [self topmostViewControllerFrom:[(id)viewController topViewController]
                              includeModal:includeModal];

    return viewController;
}

[UIApplication sharedApplication].window.rootViewController
的结果是什么?(您必须将其转换为UIApplicationLegate的类型)它也不会命中while循环,因为
presentedViewController
适用于通过
presentViewController:animated:completion:
以模式呈现(您的不是)的VCs,我在尝试编译代码时出错,你是说钥匙窗而不是窗户?因为
AppDelegate*app=(AppDelegate*)[UIApplication sharedApplication].window.rootViewController
最后出现了一个错误:“在UIApplication*类型的对象上找不到属性‘window’”。如果你是指keyWindow,你会注意到在我的黑客攻击中,我实际上使用了确切的代码来获取顶级控制器,这就是我最终返回的。对于该循环,我应该使用什么使其工作?或者我应该创建一个虚拟的“根视图控制器”样式的类,只添加这个HomeVC,而不是让根作为主视图控制器?@MatthewBahr如何加载另一个视图,从HomeVC?好的,尝试过没有一个if语句计算为true,它只返回传入的viewController。不过值得一试。当它试图同时执行2个片段时,此警告通常出现在故事板中。我相信appdelegate您试图同时显示2个ViewController。您是否尝试将导航控制器设置为rootviewcontroller,[self.window setRootViewController:navigationController];
- (UIViewController *)topmostViewControllerFrom:(UIViewController *)viewController
                               includeModal:(BOOL)includeModal
{
    if ([viewController respondsToSelector:@selector(selectedViewController)])
    return [self topmostViewControllerFrom:[(id)viewController selectedViewController]
                              includeModal:includeModal];

    if (includeModal && viewController.presentedViewController)
    return [self topmostViewControllerFrom:viewController.presentedViewController
                              includeModal:includeModal];

    if ([viewController respondsToSelector:@selector(topViewController)])
    return [self topmostViewControllerFrom:[(id)viewController topViewController]
                              includeModal:includeModal];

    return viewController;
}