Swift instantiateViewControllerWithIdentifier

В настоящее время у меня есть: 1. Initial ViewController - AppStateViewController 2.TabBarController - AuthorizedSessionViewController 3. ViewController - UnauthorizedSessionViewController

Код AppStateViewController - https://gist.github.com/nspavlo/de7a03f80e57694a12ba

Если я вызываю switchToAuthorizedSessionViewController() и switchToUnauthorizedSessionViewController() в viewDidLoad() AuthorizedSessionViewController появляется вместо UnauthorizedSessionViewController.

Мой gol должен загрузить правый контроллер на didFinishLaunchingWithOptions и изменить его при изменении appState.

Ответ 1

Почему вы используете switchToAuthorizedSessionViewController() в своем Метод switchToViewController():

func switchToViewController(identifier: String) {
    let viewController = self.storyboard?.instantiateViewControllerWithIdentifier(identifier) as UIViewController
    self.navigationController?.setViewControllers([viewController], animated: false)
    **switchToAuthorizedSessionViewController()**
}

Вы создадите с ним бесконечный цикл, попробуйте следующее:

class AppStateViewController: UIViewController {
    var authorized: Bool = false {
        didSet {
            if authorized { 
                 switchToAuthorizedSessionViewController()
            } else {
                switchToUnauthorizedSessionViewController()
            }
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.authorized = false
    }

    func switchToAuthorizedSessionViewController() {
        let sessionViewControllerID = "AuthorizedSessionViewController"
        switchToViewController(sessionViewControllerID)
    }

    func switchToUnauthorizedSessionViewController() {
        let sessionViewControllerID = "UnauthorizedSessionViewController"
        switchToViewController(sessionViewControllerID)
    }

    func switchToViewController(identifier: String) {
    let viewController =self.storyboard?.instantiateViewControllerWithIdentifier(identifier) as UIViewController
        self.navigationController?.setViewControllers([viewController], animated: false)
    }
}

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