En mi AppDelegate tengo esto:

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
}

Y luego, en mi Coordinador de aplicaciones, tengo esto:

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

Pero cuando lo ejecuto solo veo una pantalla en negro. Este patrón solía funcionar para mí en Swift 3, pero no puedo entender qué estoy haciendo incorrectamente con Swift 5.

He eliminado Main.storyboard y borré todas las referencias a él de info.plist también.

0
Latcie 21 dic. 2019 a las 07:35

2 respuestas

La mejor respuesta

Me di cuenta de esto.

Apple había movido bastante lógica de lanzamiento a SceneDelegate desde AppDelegate, así que simplemente moví mi código allí y funcionó.

0
Latcie 21 dic. 2019 a las 17:25

Esto se debe al orden de inicialización de las propiedades.

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

En este punto; ya ha llamado al inicio appCoordinator pero su window no tiene la referencia a rootViewController; que se hace más adelante

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

Si cambia por encima de estas dos líneas antes de la llamada appCoordinator.start(), el problema se resolverá.

0
Rahul 21 dic. 2019 a las 04:51