• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UIWindow 启动后丢失 rootviewcontroller

[复制链接]
菜鸟教程小白 发表于 2022-12-12 09:54:35 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我的应用程序有一个带有正确设置的 rootview Controller 的 UIWindow。我知道这一点,因为我在设置 rootViewController(在应用程序委托(delegate)中)后检查它,一切都很好。

我的应用启动后,一切正常。我的问题是,当我 checkin “主” View 时,UIWindow 上的 rootview Controller 不再正确设置。

我的应用程序运行良好.. 那么您可能想知道的问题是什么...好吧,我正在尝试实现 AdColony(视频广告),他们需要获取 UIWindow 的 rotviewcontroller 来显示他们的广告。当他们检查 rootviewcontroller 时......它是空的。

我也添加了代码来检查.. rootviewcontroller 为空。

我的 UIWindow 怎么会丢失它指向 rootviewcontroller 的指针?我需要帮助了解 UIWindow 架构的工作原理。

谢谢

检查 UIWindow 的可见 Controller 的代码(下面的代码为 viewcontrollers 值返回 nil。

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

    [self getVisibleViewControllerChild:rootViewController];


- (UIViewController*)getVisibleViewControllerChildUIViewController*)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;

}



Best Answer-推荐答案


我真的不知道你想用这段代码做什么,但是方法 keyWindow 似乎返回 nil,所以 rootViewController 也将是 nil。我不知道为什么这是真的,但你可以得到 rootViewController (我假设你是从一个 View Controller 做这个):

self.view.window.rootViewController

关于ios - UIWindow 启动后丢失 rootviewcontroller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15651030/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap