Ios UIWindow在更改rootViewController时会导致黑屏

Ios UIWindow在更改rootViewController时会导致黑屏,ios,swift,cocoa-touch,uistoryboard,uiwindow,Ios,Swift,Cocoa Touch,Uistoryboard,Uiwindow,我将从主要问题开始:我的问题不容易重现 所以。。。在我的应用程序中,根据用户是否是第一次打开它,我正在更改rootViewController 我是这样做的: @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchi

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

所以。。。在我的应用程序中,根据用户是否是第一次打开它,我正在更改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
    }
}
这基本上非常有效!由于我目前正在构建内置ViewController,我删除了if,因此它始终显示。这也很好,但突然应用程序无法启动。屏幕保持黑色。然后我在另一台设备上运行完全相同的代码,它在那里工作。 顺便说一句,上面的代码就是我的AppDelegate中的全部代码,如果创业投资公司将所有内容都注释掉,问题仍然存在

当查看我的应用程序的UI调试器时,它看起来也很奇怪: 通常情况下,UIWindow旁边会有一个箭头,显示它的根确实是我的VC,但在我的例子中,情况并非如此

我不介意从我的设备上删除应用程序,然后重新安装,但我有一个用户投诉我的另一个应用程序,用户的逻辑与我相同,他们告诉了我确切的问题。现在我基本上复制了这个问题,但不知道问题应该在哪里

顺便说一句,我的应用程序正在使用故事板

也许有人以前有过这个问题,并且对可能出现的问题有任何想法

编辑

今天又有问题了。。。以下是更多的观察结果: 当我启动ViewController并输出它的视图时,它是不正确的。故事板中真正设置的不是视图。这是一个随机的其他视图。 故事板是否可能已损坏?如果是的话。。。我能怎么办? 在我将随机子视图添加到主视图控制器视图并再次运行后,它再次工作。。。那么很明显故事板不知怎的被破坏了

好的。。。而发展。。。好啊但是对于一个应用程序来说,突然之间故事板被破坏了。。。那真是太糟糕了

以前有人有过这个问题吗?怎么解决呢?

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

@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
    }
}

我终于解决了这个问题。无论出于何种原因,我显然将初始视图控制器的视图出口双重链接到子视图。因此,它有两个出口的看法财产(怎么可能呢?) 它在启动时随机选择了一个或另一个。。。。
用一位朋友非常敏锐的眼光看问题:)

你能分享切换的完整代码吗?你是否编写了
window.makeKeyAndVisible()
?你是否检查过你想要显示的视图控制器在你的故事板中是否仍然标记为初始视图控制器?上面的代码就是所有代码。。。我尝试了
makeKeyAndVisible
。。。没什么区别。是的,VC是故事板中的第一个。当我重新安装应用程序或在不同的设备上运行时,它会起作用。。。这就是为什么它如此奇怪…@Georg在你的例子中,任何窗口对象是零的,因此你可以初始化你的窗口对象错误将解决下面的检查回答嘿,Sumit,问题是窗口不是零。就在那里。。。我真的不明白这个问题…:(