«Использование неразрешенного идентификатора rootViewController» при идентификации и загрузке контроллеров представления в делегате приложения - PullRequest
0 голосов
/ 13 апреля 2019

Чтение Изучение Swift путем создания приложений Эмиль Атанасов, я пытаюсь написать код в делегате приложения, чтобы запустить приложение на TabbarViewController, если пользователь уже вошел в систему (а не в SignInViewController)).Однако, несмотря на написание двух похожих функций для экрана входа в систему и контроллера основного вида (так же, как в книге), я получаю множество ошибок в функции загрузки контроллера основного вида - openMainViewController ()

ошибки: «Для сопоставления с образцом в условии требуется ключевое слово case». Использование неразрешенного идентификатора rootViewController '

Я проследил книгу, убедился, что идентификаторысовпадение в основной раскадровке (хотя TabbarViewController не имеет класса, это нормально?)

func openSignInScreen() {
    if let signInViewController = self.window?.rootViewController?.storyboard?.instantiateViewController(withIdentifier: "SignInViewController") as? SignInViewController {
        signInViewController.view.frame = (self.window?.rootViewController?.view.frame)!
        signInViewController.view.layoutIfNeeded()
        //nice transition between views
        UIView.transition(with: window!, duration: 0.3, options: .transitionCrossDissolve, animations: {self.window?.rootViewController = signInViewController }, completion: { completed in //nothing to do here
        })
        }
    }
//continue.. now open main View Controller
func openMainViewController() {
    if let rootViewController() = self.window?.rootViewController?.storyboard?.instantiateViewController(withIdentifier: "TabbarViewController") {
            rootViewController().view.frame =  (self.window?.rootViewController?.view.frame)!
            rootViewController().view.layoutIfNeeded()
            //nice transition between views
            UIView.transition(with: window!, duration: 0.3, options: .transitionCrossDissolve, animations: {self.window?.rootViewController = rootViewController() }, completion: { completed in //maybe do something here
        })
    }
}

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

1 Ответ

0 голосов
/ 13 апреля 2019

Я подозреваю, что вы допустили ошибку при копировании из книги

Замените ваш rootViewController() на rootViewController, так как это должен быть константа, а не метод.как в openSignInScreen()

Так что ваш обновленный openMainViewController будет

func openMainViewController() {
        if let rootViewController = self.window?.rootViewController?.storyboard?.instantiateViewController(withIdentifier: "TabbarViewController") {
            rootViewController.view.frame =  (self.window?.rootViewController?.view.frame)!
            rootViewController.view.layoutIfNeeded()
            //nice transition between views
            UIView.transition(with: window!, duration: 0.3, options: .transitionCrossDissolve, animations: {self.window?.rootViewController = rootViewController }, completion: { completed in //maybe do something here
            })
        }
    }

Примечание : чтобы это работало, у вас должен быть ViewController враскадровка с идентификатором TabbarViewController

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