//用的swift语言写的,其实OC也是同样地道理理解。
//一旦触发了相同ID的segue就会触发此方法。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "addSegueID" {
//之前对这个方法,是只知其然不知其所以然,现在才明白了。第一,在SB当中,拖了一根segue线之后,只要是走了这个prepareForSegue方法,就相当于是给navigationController和ViewController创建了实例对象。现在我自己又在这个方法里创建了一个对象,显然这两个对象是不一样的。所以就会出现这样的错误。
//有什么可以证明走了这个方法就是创建了实例了呢?
//其实可以从segue.destinationController就可看出来,因为segue可以自己找到目的控制区,并且找的十分准确。
//再加上,看API中的介绍,segue这个对象,已经包含了源控制其和目标控制器的信息了。所以可以充分证明以上说法。
//个人观点,也不知道成立与否,segue 的 destinationController属性应该属于计算属性,我们只需要拿来使用即可。并且他也是只读属性,本人已经验证过了。
//另外需要补充一点知识:UINavigationController的父类是UIViewController,所以UINavigationController本身必然有一个根view,但是纵观之前所有用到UINavigationController的地方,我们都没有真正的看到过他的view,那么,他的view去哪了?
//要认识到如果导航控制器没有根视图的话是不允许这种情况发生的。所以,每次,我们都是让导航的view指向了其他视图控制器的view,这样,就减少了内存的浪费。何谈此言?
//因为,每次创建导航控制器,必然会创建一个根视图,如果你不把根视图指向其他的,必然会造成他本身的根视图占用空间,但是该空间我们并没有利用他,所以,这就是造成了内存浪费的点。
// API中对view的解释:public var view: UIView! // The getter first invokes [self loadView] if the view hasn't been set yet. Subclasses must call super if they override the setter or getter.
//
// let addContactVC: AddContactViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("AddContactVCID") as! AddContactViewController
// addContactVC.view.backgroundColor = UIColor.redColor()
// addContactVC.nameTextField.text = "123"
//
// print(addContactVC)
// addContactVC.view.backgroundColor = UIColor.whiteColor()
//这样就可以获取到目的控制器。
let addContactNC = segue.destinationViewController as! UINavigationController
let addContactVC = addContactNC.viewControllers.first as! AddContactViewController