2014-09-18 4 views
1

В настоящее время у меня есть: 1. Начальное ViewController - AppStateViewController 2 .TabBarController - AuthorizedSessionViewController 3. ViewController - UnauthorizedSessionViewControllerSwift instantiateViewControllerWithIdentifier

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

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

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

ответ

5

Почему вы используете 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) 
    } 
} 

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

Смежные вопросы