簡體   English   中英

Swift 5 應用協調器模式導致黑屏

[英]Swift 5 Applying coordinator pattern results in blank screen

在我的 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 中刪除了對它的所有引用。

想通了這一點。

Apple 已經將相當多的啟動邏輯從 AppDelegate 移到了 SceneDelegate,所以我只是將我的代碼移到那里,並且它起作用了。

這是因為屬性初始化的順序。

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

在這個階段; 您已經調用了appCoordinator start 但您的window沒有對rootViewController的引用; 這是稍后完成的。

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

如果在appCoordinator.start()調用之前appCoordinator.start()這兩行以上,問題就會得到解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM