切换视图后数据丢失
Data is lost after switching views
在屏幕 A 中,我从用户那里收集数据,然后使用 prepare for segue 功能将其显示在屏幕 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
}
}
Then I noticed if the user goes to Screen C and then back to Screen B the data is gone. How do I keep the data there.
我看到两个问题:
看起来你实际上并没有回到你离开的"screen B"。故事板显示了从 B 到 C 的推送转场,以及从 C 到 B 的另一个推送转场。所以我认为正在发生的事情是您正在创建 另一个 屏幕 B,与第一个屏幕分开。您应该查看 unwinding the push segue 而不是添加另一个。请记住:您在情节提要中创建的屏幕不是单个对象 -- 它们更像是对象的模式或原型,并且可以多次实例化。
更一般地说,避免将程序的数据存储在视图甚至视图控制器中是个好主意。 MVC中的M代表model,意思是作为一个单独的对象(或对象组)管理数据和业务逻辑你的应用程序。使用模型不能解决问题 #1,但它仍然可以帮助您避免很多 "hey, where did my data go?" 问题。
这是一个常见问题。
您需要在实例化时将数据传递到每个新的 VC 中。你要保存的数据可以是每个VC.
中的一个实例变量
或者你需要将你想要持久化的数据保存到NSUserDefaults
或者使用Core Data
。如果你走这条路,一旦你将数据保存到这些地方之一,你就可以随时随地访问它。
在屏幕 A 中,我从用户那里收集数据,然后使用 prepare for segue 功能将其显示在屏幕 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
}
}
Then I noticed if the user goes to Screen C and then back to Screen B the data is gone. How do I keep the data there.
我看到两个问题:
看起来你实际上并没有回到你离开的"screen B"。故事板显示了从 B 到 C 的推送转场,以及从 C 到 B 的另一个推送转场。所以我认为正在发生的事情是您正在创建 另一个 屏幕 B,与第一个屏幕分开。您应该查看 unwinding the push segue 而不是添加另一个。请记住:您在情节提要中创建的屏幕不是单个对象 -- 它们更像是对象的模式或原型,并且可以多次实例化。
更一般地说,避免将程序的数据存储在视图甚至视图控制器中是个好主意。 MVC中的M代表model,意思是作为一个单独的对象(或对象组)管理数据和业务逻辑你的应用程序。使用模型不能解决问题 #1,但它仍然可以帮助您避免很多 "hey, where did my data go?" 问题。
这是一个常见问题。
您需要在实例化时将数据传递到每个新的 VC 中。你要保存的数据可以是每个VC.
或者你需要将你想要持久化的数据保存到NSUserDefaults
或者使用Core Data
。如果你走这条路,一旦你将数据保存到这些地方之一,你就可以随时随地访问它。