【问题标题】:Swift 5 Applying coordinator pattern results in blank screenSwift 5 应用协调器模式导致黑屏
【发布时间】:2020-04-13 10:57:06
【问题描述】:

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

【问题讨论】:

  • 什么是协调员?问题似乎与此有关,但您尚未将其暴露在我们的视野中。
  • 您是否知道如果您在 Xcode 11 中创建一个新项目,App Delegate 的 window 什么也不做?重要的窗口现在是 Scene Delegate 的 window

标签: swift coordinator-pattern


【解决方案1】:

想通了。

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

【讨论】:

  • 我遇到了同样的问题,但是将我的逻辑移到 SceneDelegate 并没有解决它。您能否提供一些代码来使用,或者您是否可以记住您的操作方式。谢谢
【解决方案2】:

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

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

现阶段;您已经调用了appCoordinator 开始,但您的window 没有对rootViewController 的引用;稍后完成。

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

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

【讨论】:

  • 不行,还是黑屏。
  • 它对我来说很好用。您可以尝试将InitialViewController() 背景颜色更改为red 并查看它是否被添加到导航控制器中?
  • 您是否更改了其他内容?就像在 info.plist 或任何默认故事板中一样?
  • 即使我实例化了故事板,它也不会显示出来。
  • 我没有更改info.plist 中的任何内容,只是从部署信息部分的Main Interface 中删除了Main 关键字。你可以在General部分找到这个。我也有项目,你可以参考github.com/coyo8/photopad
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
相关资源
最近更新 更多