Ios 在dismissViewController期间无法为文本字段赋值

Ios 在dismissViewController期间无法为文本字段赋值,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我有两个视图控制器-A和B。 ViewController A有一个文本字段。单击ViewController A的textfield,会出现具有另一个textfield的View Controller B。单击ViewController B键盘上的“完成”,调用dissmissViewController,文本字段的数据应从ViewController B移动到A 我无法将数据从B传递到A。我正在调用A的ViewdidLoad(),然后再调用ViewController。在A的viewdid

我有两个视图控制器-A和B。 ViewController A有一个文本字段。单击ViewController A的textfield,会出现具有另一个textfield的View Controller B。单击ViewController B键盘上的“完成”,调用dissmissViewController,文本字段的数据应从ViewController B移动到A

我无法将数据从B传递到A。我正在调用A的ViewdidLoad(),然后再调用ViewController。在A的viewdidLoad()中,我有一个textfieldA.text=textfieldB。它在投掷-

致命错误:在展开可选值时意外发现nil“

委托模式:

视图控制器2:

//Define Protocol
@protocol VC2Delegate {
    doneClicked(val:String)
}

Class:VC2 {
    //Create Delegate variable
    var delegate:VC2Delegate?

    //method of done clicked
    func btnDoneClicked(sender:UIButton) {

        //call delegate method
        delegate.doneClicked(vc2TextField.text)
        //dismiss view controller
        self.dismissViewController......
    }

}
//Conform Protocol
Class:VC1, VC2Delegate {

    //implement delegate method
    func doneClicked(val:String) {
      //assign value to textfield
      vc1TextField.text = val

    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "MySegueFromVC1ToVC2" {
            if let destVC = segue.destinationViewController as? VC2 {
                //assign delegate to VC1
                VC2.delegate = self
            }
        }
    }
}
视图控制器1:

//Define Protocol
@protocol VC2Delegate {
    doneClicked(val:String)
}

Class:VC2 {
    //Create Delegate variable
    var delegate:VC2Delegate?

    //method of done clicked
    func btnDoneClicked(sender:UIButton) {

        //call delegate method
        delegate.doneClicked(vc2TextField.text)
        //dismiss view controller
        self.dismissViewController......
    }

}
//Conform Protocol
Class:VC1, VC2Delegate {

    //implement delegate method
    func doneClicked(val:String) {
      //assign value to textfield
      vc1TextField.text = val

    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "MySegueFromVC1ToVC2" {
            if let destVC = segue.destinationViewController as? VC2 {
                //assign delegate to VC1
                VC2.delegate = self
            }
        }
    }
}

我建议不要显式调用viewDidLoad方法。发布完整的代码会更容易提供帮助。永远不要直接调用
viewDidLoad
。如果使用segues,则可以使用unwind segue将数据传递回,但听起来好像不是,因此委派模式可能更合适