0

在我的 AppDelegate 我有这个:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    window = UIWindow(frame: UIScreen.main.bounds)

    let rootNavController = UINavigationController()
    appCoordinator = AppCoordinator(withRootController: rootNavController)
    appCoordinator.start()

    window?.rootViewController = rootNavController
    window?.makeKeyAndVisible()

return true
}

然后在我的 AppCoordinator 中,我有这个:

final class AppCoordinator {

  var rootController: UINavigationController
  let initialViewController: UIViewController

  init(withRootController: UINavigationController) {
    self.rootController = withRootController
    initialViewController = InitialViewController()
  }
}

extension AppCoordinator: Coordinator {

    func start() {
        //rootController.show(rootController, sender: self)
        rootController.pushViewController(initialViewController, animated: false)
    }
}

但是当我运行它时,我只看到一个黑屏。这种模式曾经在 Swift 3 中为我工作,但我无法弄清楚我在 Swift 5 中做错了什么。

我已经删除了 Main.storyboard 并从 info.plist 中删除了所有对它的引用。

4

2 回答 2

1

想通了。

Apple 已经将相当多的启动逻辑从 AppDelegate 移到了 SceneDelegate,所以我只是将我的代码移到那里,它就可以工作了。

于 2019-12-21T17:25:44.373 回答
0

这是因为属性初始化的顺序。

let rootNavController = UINavigationController()
appCoordinator = AppCoordinator(withRootController: rootNavController)
appCoordinator.start()

在这个阶段; 您已经调用了appCoordinatorstart 但您window没有对rootViewController;的引用 这是稍后完成的。

window?.rootViewController = rootNavController
window?.makeKeyAndVisible()

如果您在通话前移到这两行之上appCoordinator.start(),问题就会得到解决。

于 2019-12-21T04:51:48.860 回答