Ios 从segue返回后,ViewController中更改的值将重置

Ios 从segue返回后,ViewController中更改的值将重置,ios,swift,segue,Ios,Swift,Segue,我的应用程序有两个ViewController,我可以通过分段前后切换。第一个(主)VC有许多已初始化的变量。第二个VC是键盘编辑器,可以更改第一个VC中的一个变量;第一个VC发送一个指示器,指示要更改的变量,第二个VC发送回新值 但是,如果我更改一个值,然后更改第二个值,则更改的第一个值将重置为其初始值 这是第一个ViewController(至少是示例所需的部分): 这是第二个ViewController: class KeypadViewController: UIViewControll

我的应用程序有两个ViewController,我可以通过分段前后切换。第一个(主)VC有许多已初始化的变量。第二个VC是键盘编辑器,可以更改第一个VC中的一个变量;第一个VC发送一个指示器,指示要更改的变量,第二个VC发送回新值

但是,如果我更改一个值,然后更改第二个值,则更改的第一个值将重置为其初始值

这是第一个ViewController(至少是示例所需的部分):

这是第二个ViewController:

class KeypadViewController: UIViewController {

    var idToChange: Int;
    var changedValue: Int;

    required init(coder aDecoder: NSCoder) {
        idToChange = 0;
        changedValue = 0;
        super.init(coder: aDecoder);
    }
    // Note that idToChange is set correctly by the segue

    // Code that sets changedValue left out

    @IBAction func clickTheOKButton(B: UIButton)
    {
        performSegueWithIdentifier("segueMainView", sender: self);
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var vc: ViewController = segue.destinationViewController as ViewController;
        switch (idToChange)
        {
            case 1:
                vc.ValueOne = changedValue;
            case 2:
                vc.ValueTwo = changedValue;
            default:
                break;
        }
    }
}
当主控制器请求更改Value1,而第二个控制器尝试将Value1更改为10时,Value1为10。 但是,如果主控制器随后请求更改Value2,而第二个控制器尝试将Value2更改为20,则Value2变为20,但Value1被设置回其初始化值1


除了将第一个控制器中的所有可变值传递给第二个控制器,然后让第二个控制器将它们全部发送回(在任何更改后)第一个控制器之外,还有什么方法可以让第二个控制器更改一个值而不重设其他值呢?

当您触发一个序列时,它会初始化一个新的ViewController。您应该使用“后退按钮”或
popViewController

像这样:

class KeypadViewController: UIViewController {

  var idToChange: Int;
    var changedValue: Int;

    required init(coder aDecoder: NSCoder) {
        idToChange = 0;
        changedValue = 0;
        super.init(coder: aDecoder);
    }
    // Note that idToChange is set correctly by the segue

    // Code that sets changedValue left out

    @IBAction func clickTheOKButton(B: UIButton) {
        var vc: ViewController = self.navigationController.viewControllers[0] as ViewController // Your view controller's index.
        switch (idToChange) {
            case 1:
                vc.ValueOne = changedValue;
                break;
            case 2:
                vc.ValueTwo = changedValue;
                break;
            default:
                break;
        }

        self.navigationController.popViewControllerAnimated(true)
    }

}

rdelmar在对我最初问题的评论中回答。(这是因为我找不到方法将对原始问题的评论标记为答案而添加的。)

您是否使用“放松”序列返回到第一个控制器?如果没有,那么你实际上就不会回去,你正在实例化一个新的控制器。“Un-wind-seg-ue?”你的想法引起了我的兴趣,我想订阅你的时事通讯。(说真的,这就解决了——谢谢。)
class KeypadViewController: UIViewController {

  var idToChange: Int;
    var changedValue: Int;

    required init(coder aDecoder: NSCoder) {
        idToChange = 0;
        changedValue = 0;
        super.init(coder: aDecoder);
    }
    // Note that idToChange is set correctly by the segue

    // Code that sets changedValue left out

    @IBAction func clickTheOKButton(B: UIButton) {
        var vc: ViewController = self.navigationController.viewControllers[0] as ViewController // Your view controller's index.
        switch (idToChange) {
            case 1:
                vc.ValueOne = changedValue;
                break;
            case 2:
                vc.ValueTwo = changedValue;
                break;
            default:
                break;
        }

        self.navigationController.popViewControllerAnimated(true)
    }

}