更改rootViewController

时间:2018-01-05 14:02:39

标签: ios swift cocoa-touch uistoryboard uiwindow

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

所以......在我的应用中,根据用户是否第一次打开它,我正在更改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-Debugger时,它看起来也很奇怪: enter image description here 通常,UIWindow旁边会出现一个箭头,表明它的根目录确实是我的VC,但在我的情况下并非如此。

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

我的应用正在使用故事板btw。

也许之前有人遇到过这个问题,并对可能出现的问题有所了解。

修改

今天又遇到了问题......以下是一些观察: 当我启动ViewController并输出它的视图时,它不正确。它不是故事板中真正设置的视图。这是一个随机的其他观点。 故事板是否可能腐败?如果是这样的话......我该怎么办呢? 在我的Main-View-Controllers视图中添加了一个随机子视图并再次运行后,它又重新运行了...显然故事板有点腐败了吗?

好的......虽然开发......好吧......但是对于一个在那里的应用程序,突然间故事板变得腐败......这真的很糟糕! !

以前有人有这个问题吗?以及如何解决?

2 个答案:

答案 0 :(得分:0)

试试这个 你的案例窗口是零

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

答案 1 :(得分:0)

我终于找到了问题所在。无论出于何种原因,我显然将初始视图控制器的视图出口双链接到子视图。所以它有一个视图属性的出口(这怎么可能?) 它在启动时随机挑选或另一个.... 对朋友非常敏锐地看到问题:)