почему мой навигационный контроллер равен нулю даже после встраивания навигационного контроллера в раскадровку и использования push segue? - PullRequest
0 голосов
/ 01 апреля 2019

Я пытался прочитать несколько потоков в Stackoverflow, но я думаю, что я реализовал все из них, но все же это не работает.вот моя раскадровка

enter image description here

, поэтому я скрываю (снимаю флажок) видимость панели навигации, как на рисунке ниже, потому что я хочу реализовать свой собственный заголовок навигации'как на изображении выше (справа): enter image description here

, и когда нажимается кнопка возврата, я использую код ниже:

self.navigationController?.popViewController(animated: true)

но, к сожалению, после того, как я проверил, контроллер навигации имеет нулевое значение, и я не могу вернуться к предыдущему VC.

Я установил некоторый код в делегате приложения, как этот, чтобы настроить навигацию.если пользователь уже выполнил вход в систему, он будет перемещен в HomeVC (главная панель вкладок), в противном случае он будет перенаправлен в последовательность входа в систему, как в приведенной выше раскадровке

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        // to print Local Database Location, uncomment the line below if you want to trace the location of Realm Database / User Default
        // print("Location of Realm Database: \(Realm.Configuration.defaultConfiguration.fileURL)")



        checkHasLoggedInOrNot()




        return true
    }




}

extension AppDelegate {
    // MARK: - Helper Methods

    func checkHasLoggedInOrNot() {
        let userHasLoggedIn = AuthService.shared.hasLoggedIn

        if userHasLoggedIn {
            goToMainTabBar()
        } else {
            goToAuthVC()
        }
    }


}

extension AppDelegate {
    // MARK: - Navigation

    func goToMainTabBar() {
        let storyboard = UIStoryboard(name: StoryBoardName.Main.rawValue, bundle: nil)
        let mainTabBar = storyboard.instantiateViewController(withIdentifier: MainStoryboardData.StoryBoardID.MainTabBar.rawValue)
        window?.rootViewController = mainTabBar
    }

    func goToAuthVC() {
        let storyboard = UIStoryboard(name: StoryBoardName.Auth.rawValue, bundle: nil)
        let authVC = storyboard.instantiateViewController(withIdentifier: AuthStoryboardData.StoryBoardID.AuthVC.rawValue)
        window?.rootViewController = authVC
    }
}

, возможно, проблема в приведенном ниже коде?

func goToAuthVC() {
        let storyboard = UIStoryboard(name: StoryBoardName.Auth.rawValue, bundle: nil)
        let authVC = storyboard.instantiateViewController(withIdentifier: AuthStoryboardData.StoryBoardID.AuthVC.rawValue)
        window?.rootViewController = authVC
    }

потому что он указывает на AuthVC?не к навигационному контроллеру?

что здесь не так?

1 Ответ

2 голосов
/ 01 апреля 2019

Push/Pop возможно только при наличии Navigation stack в window.

Замените goToAuthVC на следующее -

func goToAuthVC() {

    let storyboard = UIStoryboard(name: StoryBoardName.Auth.rawValue, bundle: nil)
    let authVC = storyboard.instantiateViewController(withIdentifier: AuthStoryboardData.StoryBoardID.AuthVC.rawValue)
    let navigationController  = UINavigationController(rootViewController: authVC)
    window?.rootViewController = navigationController
    window?.makeKeyAndVisible()

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...