首页 > 解决方案 > 切换视图后数据丢失

问题描述

在 Screen AI 中,从用户那里收集数据,然后使用 prepare for segue 功能将其显示在 Screen B 上。然后我注意到如果用户转到屏幕 C,然后返回屏幕 B,数据就消失了。我如何将数据保存在那里。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textInput: UITextField!

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let a : BViewController = segue.destination as! BViewController
        a.honey = textInput.text!
    }
}

import UIKit

class BViewController: UIViewController {

    @IBOutlet weak var x: UILabel!

    var honey:String = "default"
    override func viewDidLoad() {
        super.viewDidLoad()
        x.text = honey
    }
}

故事板

标签: iosswiftuser-interfaceuiviewcontroller

解决方案


然后我注意到如果用户转到屏幕 C,然后返回屏幕 B,数据就消失了。我如何将数据保存在那里。

我看到两个问题:

  1. 看起来您实际上并没有回到您离开的“屏幕 B”。情节提要显示了从 B 到 C 的推送序列,以及从 C 到 B 的另一个推送序列。所以我认为正在发生的事情是您正在创建另一个屏幕 B,与第一个屏幕分开。您应该考虑展开 push segue而不是添加另一个。请记住:您在情节提要中创建的屏幕不是单独的对象——它们更像是对象的模式或原型,并且可以多次实例化。

  2. 更一般地说,避免将程序的数据存储在视图甚至视图控制器中是一个好主意。MVC 中的M代表model,它是一个单独的对象(或一组对象),用于管理应用程序的数据和业务逻辑。使用模型不能解决问题 #1,但它仍然可以帮助您避免很多“嘿,我的数据去哪儿了?” 问题。


推荐阅读