Swift4, IOS 12 self.performSegue не работает - PullRequest
0 голосов
/ 06 декабря 2018
override func viewDidLoad() {
    super.viewDidLoad()
    let str = self.appDefaults.string(forKey: Constants.init().userBirthDayStrKey)
    print(str!)
    if nil != self.appDefaults.string(forKey: Constants.init().userBirthDayStrKey) {
        print("performSegue")
        self.performSegue(withIdentifier: "goToTimeViewScreen", sender: self)
        self.dismiss(animated: true, completion: nil)
    }
}

Я хочу открыть другой ViewController в методе viewDidLoad, но он не работает, что не так с кодом? Как открыть другой ViewController без нажатия одной кнопки?

1 Ответ

0 голосов
/ 06 декабря 2018

Хорошо, давайте подумаем о вашем коде:

override func viewDidLoad() {

Так что вы не можете выполнить переход из viewDidLoad.Ваш контроллер представления еще не находится в интерфейсе;нет ничего, от чего можно было бы перейти.Вы должны подождать, пока что-то типа viewDidAppear.

    if nil != self.appDefaults.string(forKey: Constants.init().userBirthDayStrKey) {

Так что, если оно равно nil, ничего не произойдет вообще.Как мы узнаем, если это так?Вы не сказали нам.

        self.performSegue(withIdentifier: "goToTimeViewScreen", sender: self)

Поэтому, если от этого контроллера представления с этим идентификатором не будет переходов, ничего не произойдет.Как мы узнаем, что существует?

        self.dismiss(animated: true, completion: nil)

Что на земле делает эта линия , делающая там?Если переход был презентационным (модальным), он отменит его, и ничего не произойдет.

Итак, есть много причин, по которым ничего не может происходить.

...