我将从主要问题开始:我的问题不容易重现。
所以...在我的应用中,根据用户是否是第一次打开它,我正在更改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调试器时,它也看起来很奇怪:
通常,在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
}
}