UIWindow在启动后丢失了rootviewcontroller

时间:2013-03-27 02:37:09

标签: ios uinavigationcontroller uiwindow appdelegate

我的应用程序有一个UIWindow,它具有正确设置的rootview控制器。我知道这是因为我在设置后检查了rootViewController(在app委托中),一切都很好。

一旦我的应用程序启动,一切正常。我的问题是当我检查“主”视图时,UIWindow上的rootview控制器不再正确设置。

我的应用程序工作得很好..所以你可能想知道的问题是什么......好吧,我正在尝试实施AdColony(视频广告),他们需要抓住UIWindow的rotviewcontroller来展示他们的广告。当他们检查rootviewcontroller时......它是null。

我已添加了要检查的代码..并且rootviewcontroller为null。

我的UIWindow如何丢失指向rootviewcontroller的指针?我需要帮助了解UIWindow架构的工作原理。

由于

检查UIWindow的可见控制器的代码(以下代码为viewcontrollers值返回nil。

    UIWindow* window = [UIApplication sharedApplication].keyWindow;
    UIViewController* rootViewController = [window rootViewController];

    [self getVisibleViewControllerChild:rootViewController];


- (UIViewController*)getVisibleViewControllerChild:(UIViewController*)viewController {

UIViewController* visibleViewController = nil;

if(!viewController) {
    NSLog(@"nil");
    return nil;
}

if ([viewController isKindOfClass:[UINavigationController class]]) {
    UINavigationController* navigationController = (UINavigationController*)viewController;
    viewController = navigationController.visibleViewController;
    NSLog(@"viewcontroller is nav controller");
}

while (visibleViewController == nil) {

    if (viewController.modalViewController == nil) {
        visibleViewController = viewController;
        NSLog(@"visibleViewController = %@", visibleViewController);
    } else {

        if ([viewController.modalViewController isKindOfClass:[UINavigationController class]]) {
            UINavigationController *navigationController = (UINavigationController *)viewController.modalViewController;
            viewController = navigationController.visibleViewController;
            NSLog(@"modal 1");
        } else {
            viewController = viewController.modalViewController;
            NSLog(@"modal 2");
        }
    }

}

return visibleViewController;

}

1 个答案:

答案 0 :(得分:1)

我无法弄清楚你要用这个代码做什么,但方法keyWindow似乎返回nil,所以rootViewController也将是nil。我不确定为什么会这样,但是你可以得到rootViewController(我假设你是从视图控制器那里做的):

self.view.window.rootViewController