在屏幕A中,我从用户那里收集数据,然后使用“准备隔离”功能将其显示在屏幕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
}
}
答案 0 :(得分:0)
然后我注意到,如果用户转到屏幕C,然后又回到屏幕B,数据就消失了。如何将数据保存在那里。
我看到两个问题:
看来您实际上并没有回到您离开的“屏幕B”。情节提要板上显示了从B到C的推送,另一个是从C到B的推送。因此,我认为正在创建的是另一个屏幕B,与第一个屏幕分开。您应该查看unwinding the push segue而不是添加另一个。请记住:您在情节提要中创建的屏幕不是单个对象,它们更像是对象的图案或原型,可以实例化多次。
更一般而言,最好避免将程序的数据存储在视图中甚至视图控制器中。 MVC中的 M 代表 model ,它是一个单独的对象(或一组对象),用于管理应用程序的数据和业务逻辑。使用模型并不能解决问题1,但仍然可以帮助您避免很多“嘿,我的数据去了哪里?”问题。
答案 1 :(得分:0)
这是一个常见问题。
实例化数据时,需要将数据传递到每个新的VC中。您要保存的数据可以是每个VC中的实例变量。
或者您需要将要保留的数据保存到NSUserDefaults
或使用Core Data
。如果走这条路,将数据保存到其中一个位置后,您可以随时随地访问它。