Swift iOS - 如何使用 NavigationController 弹出不同的 SegmentControl Index

Swift iOS -How to pop to different SegmentControl Index using a NavigationController

                                                //Index=0     //contains buttonToSwitchTab to pop to TabOneVC
                           TabZeroNavCntrlr ----TabZeroVC --- TabChangeVC
          //segmntCntrl   /
NavCntlr--ContainerView---
                          \                     //Index=1
                           TabOneNavCntrlr ---- TabOneVC

我有一个 NavControllerContainerView 与之相连。在containerView里面有一个segmentControl。 containerView 还有 2 个导航控制器与之相连,每个导航控制器都指向自己的子控制器:TabZeroVCTabOneVC。最初显示的第一个视图是 TabZeroVC (selectedSegmentIndex = 0)。里面有一个按钮指向 TabChangeVC,里面有一个 buttonToSwitchTab。按下那个按钮我想 popTabOneVC

我通过使用我的 导航控制器 尝试了下面的代码来进行切换,但是在行 tabOneVC.segmentedControl.selectedSegmentIndex = 1 上我遇到了崩溃: unexpectedly found展开可选值时为零

我在它上面放了一个断点,containerVC 被初始化了,但是它有 3 个属性 segmentedControltabZeroVCtabOneVC全部为零。由于 segmentedControlnil 这就是崩溃发生的地方。

class TabChangeVC: UIViewController{

@IBAction func buttonToSwitchTab(sender: UIButton){

    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let containerVC = mainStoryboard.instantiateViewControllerWithIdentifier("ContainerViewController") as! ContainerViewController
    containerVC.segmentedControl.selectedSegmentIndex = 1 //crash happens here
    self.navigationController?.popToViewController(containerVC, animated: true)
  }
}

容器视图:

class ContainerViewController:  UIViewController{
     @IBOutlet weak var segmentedControl: UISegmentedControl!
     @IBOutlet weak var tabZeroVC: UIView!
     @IBOutlet weak var tabOneVC: UIView!

...
}

TabOneVCselectedSegmentIndex = 1

我的问题是如何从 TabChangeVC 弹出到 TabOneVC 更重要的是,为什么 containerVC 的 segmentedControl 出现为 nil?

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil
let tabOneVC = mainStoryboard.instantiateViewControllerWithIdentifier("TabOneNavigationController") //TabOneNavCntrlr identifire      
tabOneVC.segmentedControl.selectedSegmentIndex = 1 
appDelegate.window!.rootViewController = tabOneVC

我不知道为什么 segmentedControl 显示为 nil 但我能够 pop tabOneVC 通过使用 NSNotificationCenter。我用我想显示的片段创建了一个名为 tabSwitch() 的函数,然后我在 ContainerViewControllerviewDidLoad 中添加了一个 listener

class ContainerViewController:  UIViewController{
     @IBOutlet weak var segmentedControl: UISegmentedControl!
     @IBOutlet weak var tabZeroVC: UIView!
     @IBOutlet weak var tabOneVC: UIView!

override func viewDidLoad() {
     super.viewDidLoad()

     NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(tabSwitch), name: "tabSwitch", object: nil)
  }

func tabSwitch(){

     self.segmentedControl.selectedSegmentIndex = 1
     self.tabZeroVC.hidden = true
     self.tabOneVC.hidden = false
  }
}

在 TabChangeVC 中,我添加了一个 notifier 来触发它,并添加了 navigationController?.popToRootViewControllerAnimated(true) 以返回到 root vc:

class TabChangeVC: UIViewController{

@IBAction func buttonToSwitchTab(sender: UIButton){

     NSNotificationCenter.defaultCenter().postNotificationName("tabSwitch", object: nil)
     self.navigationController?.popToRootViewControllerAnimated(true)
  }
}