菜鸟教程小白 发表于 2022-12-12 09:54:35

ios - UIWindow 启动后丢失 rootviewcontroller


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

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

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

<p>我也添加了代码来检查.. rootviewcontroller 为空。</p>

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

<p>谢谢</p>

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

<pre><code>    UIWindow* window = .keyWindow;
    UIViewController* rootViewController = ;

    ;


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

UIViewController* visibleViewController = nil;

if(!viewController) {
    NSLog(@&#34;nil&#34;);
    return nil;
}

if (]) {
    UINavigationController* navigationController = (UINavigationController*)viewController;
    viewController = navigationController.visibleViewController;
    NSLog(@&#34;viewcontroller is nav controller&#34;);
}

while (visibleViewController == nil) {

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

      if (]) {
            UINavigationController *navigationController = (UINavigationController *)viewController.modalViewController;
            viewController = navigationController.visibleViewController;
            NSLog(@&#34;modal 1&#34;);
      } else {
            viewController = viewController.modalViewController;
            NSLog(@&#34;modal 2&#34;);
      }
    }

}

return visibleViewController;
</code></pre>

<p>}</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我真的不知道你想用这段代码做什么,但是方法 keyWindow 似乎返回 nil,所以 rootViewController 也将是 nil。我不知道为什么这是真的,但你可以得到 rootViewController (我假设你是从一个 ViewController 做这个):</p>

<pre><code>self.view.window.rootViewController
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UIWindow 启动后丢失 rootviewcontroller,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15651030/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15651030/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UIWindow 启动后丢失 rootviewcontroller