Ios 从一个VC切换到另一个VC时在视图控制器中保留数据

Ios 从一个VC切换到另一个VC时在视图控制器中保留数据,ios,swift,uiviewcontroller,segue,Ios,Swift,Uiviewcontroller,Segue,我有三个视图,每个视图都有自己的视图控制器:VC1、VC2、VC3。 用户将经常在三个视图中的每一个视图之间来回切换,包括向前和向后。 每个视图都包含数据:来自上一个视图的共享数据和该视图特有的数据。 当用户返回到他已经访问过的视图时,需要保留该视图上显示的数据(与他上次访问该视图时看到的数据相同),而不是在他第一次访问该视图时设置为默认值 在第一个视图控制器VC1中,我使用prepare for segue将数据从VC1推送到VC2或VC3: override func prepare

我有三个视图,每个视图都有自己的视图控制器:VC1、VC2、VC3。 用户将经常在三个视图中的每一个视图之间来回切换,包括向前和向后。 每个视图都包含数据:来自上一个视图的共享数据和该视图特有的数据。 当用户返回到他已经访问过的视图时,需要保留该视图上显示的数据(与他上次访问该视图时看到的数据相同),而不是在他第一次访问该视图时设置为默认值

在第一个视图控制器VC1中,我使用prepare for segue将数据从VC1推送到VC2或VC3:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "segueToVC2” {
        let destinationViewController: VC2 = segue.destination as! VC2;
    destinationViewController.passedData1 = firstAmount
    destinationViewController.passedData2 = secondAmount
    destinationViewController.passedData3 = thirdAmount

    } else {
        let destinationViewController: VC3 = segue.destination as! VC3;
    destinationViewController.passedData1 = firstAmount
    destinationViewController.passedData2 = secondAmount
    destinationViewController.passedData3 = thirdAmount
    destinationViewController.passedData4 = fourthAmount
  }
通过点击每个视图上的“返回”按钮,我返回到上一个视图:

@IBAction func goBackButtonPressed(_ sender: Any) {
    print("Back Button Pressed!")
    self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)
}
我无法向后传递数据。当我从VC1返回VC2时,数据已重置为0。我没有从VC2到VC1或从VC3到VC2的分段。这是将数据传回的最干净的方法吗:在Main.storyboard中创建另一个从VC2到VC1的segue,然后在我的prepare for segue中添加另一个检查VC1的“if”

我在视图控制器之间来回传递所有这些变量,但仅在每个视图控制器中使用其中的一些变量。这似乎是一种浪费,我认为我在这方面走得不对


有什么帮助或建议吗?

当您按下“后退”按钮时,您为什么不呼叫一个将数据传递给视图控制器的代理呢

或者,如果所有视图控制器共享的数据反映相同的值。创建一个singleton类并在整个应用程序中使用这些值

示例单例类:

class SomeModel {
   static let shared = SomeModel()
   private init() {}
}

视图控制器不应存储数据。它们负责协调模型对象和视图对象。这就是他们的全部观点。您正在寻找的模式称为(模型-视图-控制器),它是iOS开发的核心部分

将数据移出视图控制器并放入模型类中。每个视图控制器都应该从模型中提取数据,并将更新发送到模型中。视图控制器之间唯一应该传递的是要处理的模型对象,大多数情况下只需要沿一个方向传递(沿堆栈向下)

委派在这里是一个有用的工具,您还可以研究“展开分段”,这些分段是为帮助您向上游发送数据而构建的。但同样,您应该发送的数据主要是对模型的引用,并且模型本身需要位于视图控制器之外

这是Objective-C,但仍然是苹果MVC设计中最好的简单示例之一,值得作为基础进行探索。即使不阅读Objective-C,您也可以看到各个部分是如何组合在一起的


我对它的研究不如对元素的研究那么多,但我声称它是使用现代iOS技术在Swift中很好地演示MVC模式的一个例子。

我不确定“static let shared=SomeModel()private init(){}”如何保存我的所有数据。它将只保存一段数据,如passedData1。但我会试试看。看看代表们!