self.navigationController?.pushViewController无法与Xcode 11.1一起使用

时间:2019-10-17 19:37:34

标签: swift xcode uinavigationcontroller

我最近用最新的Xcode开始了一个新项目,现在有了该功能 self.navigationController?.pushViewController推送新的控制器不起作用。

我已经查看了类似的答案,并检查了我自己的旧项目在运行中,他们提到导航控制器为nil,但我认为我已经解决了。

我认为这与新的SceneDelegate文件有关,这是视图管理方式的一部分。

以下是有关VC文件中弹出的第一个SceneDelegate的代码。

 let nav1 = UINavigationController()
        let mainView = MainViewController(nibName: nil, bundle: nil) //ViewController = Name of your controller
        nav1.viewControllers = [mainView]
        // Use a UIHostingController as window root view controller.
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
//            window.rootViewController = UIHostingController(rootView: contentView)
            window.rootViewController = nav1
            self.window = window
            window.makeKeyAndVisible()
        }

3 个答案:

答案 0 :(得分:2)

删除SceneDelegate.swift文件及其委托方法。

答案 1 :(得分:0)

我在新项目的Xcode 11.1中遇到了同样的问题。

删除 SceneDelegate.swift 文件,并从 AppDelegate.swift 中删除其委托方法。这个解决方案对我有用。

我用Xcode 11和Swift 5创建的开源代码。 https://github.com/gauravparvadiya/swift-news-reddit

答案 2 :(得分:0)

就像他们上面说的, 删除SceneDelegate.swift, AppDelegate.swift中的sceneDelegate方法 加 从plist文件中删除它们: UISceneConfigurations UIWindowSceneSessionRoleApplication

                key: UISceneConfigurationName
                value: Default Configuration
                key: UISceneDelegateClassName</key>
                value: $(PRODUCT_MODULE_NAME).SceneDelegate
                key: UISceneStoryboardFile
                value: Main

如果无法删除它们,则在运行应用程序时会出现黑色视图。但是,控制台中的错误消息应有助于引导您从plist中删除必要的项目。