我将从主要问题开始:我的问题不容易重现。

所以...在我的应用中,根据用户是否是第一次打开它,我正在更改rootViewController。

我是这样的:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        if /* code to figure out if it's the first launch */ {

            let storyboard = UIStoryboard(name: "Onboarding", bundle: nil)
            let onboardingViewController = storyboard.instantiateInitialViewController()

            window?.rootViewController = onboardingViewController
        }

        return true
    }
}


这基本上很好用!当我目前正在构建该Onboarding ViewController时,我删除了if,因此始终显示它。这也很好用,但是突然之间该应用程序无法启动。屏幕保持黑色。然后,我在另一台设备上运行完全相同的代码,并且在那里工作。
顺便说一句。上面的代码已包含在我的AppDelegate中,如果OnboardingVC已注释掉所有内容,则问题仍然存在。

在查看我的应用程序的UI调试器时,它也看起来很奇怪:
ios - 更改rootViewController时,UIWindow导致黑屏-LMLPHP
通常,在UIWindow旁边会出现一个箭头,表明它的根目录确实是我的VC,但就我而言,并非如此。

我不介意,只是从我的设备中删除该应用程序,然后再重新安装它,但是我遇到了我的另一个应用程序的用户投诉,该用户使用相同的逻辑,谁告诉我确切的问题。现在,我基本上重现了问题,但不知道问题应该在哪里。

我的应用程序正在使用情节提要。

也许以前有人遇到过这个问题,对可能是什么问题没有任何想法。

编辑:

今天只是又遇到了问题...这里还有一些观察结果:
当我启动ViewController并输出它的视图时,这是不正确的。故事板中并不是真正设置的视图。这是一个随机的其他观点。
情节提要是否有损坏?如果是这样,我该怎么办?
在我向Main-View-Controllers视图中添加一个随机子视图并再次运行后,它又可以正常工作了……所以,故事板显然以某种方式损坏了?

好的...虽然正在开发中...好的...但是对于已经存在的应用程序来说,情节提要突然变得损坏了……那真是太糟糕了!!!!

有人遇到过这个问题吗?以及如何解决呢?

最佳答案

尝试这个
在你的情况下窗口为零,所以

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        window = UIWindow(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
        if /* code to figure out if it's the first launch */ {

            let storyboard = UIStoryboard(name: "Onboarding", bundle: nil)
            let onboardingViewController = storyboard.instantiateInitialViewController()

            window?.rootViewController = onboardingViewController
        }
        return true
    }
}

10-08 08:47