gpt4 book ai didi

ios - 通过 Segues 持久化

转载 作者:可可西里 更新时间:2023-11-01 01:38:56 25 4
gpt4 key购买 nike

所以我试图通过 Swift 中的 segues 来理解持久性。我有三个文本字段,让我们在一个 View 中称它们为名称、日期和位置。我正在创建一个双 View 表单,因此在我收集了这些数据点(名称、日期、位置)后,我使用 segue 通过添加到第一个 View 的按钮转换到下一个 View 。

然后我在下一个 View 上添加了一个后退按钮以返回到原始 View (带有名称、日期、位置字段)。我不明白的是这些领域的值(value)观是如何持续存在的。我没有添加任何委托(delegate)或添加与第二个 View Controller 的任何连接。但是,当我从第二个 View Controller 返回到第一个 View Controller 时,值(名称、日期、位置)会保留在各自的文本字段中。但是,如果我向第二个 View Controller 文本字段添加一些内容,返回到第一个,然后向前返回到第二个,则第二个中的那些值不会持久存在。

class pageOne: UIViewController {

@IBOutlet weak var name: UITextField!
@IBOutlet weak var location: UITextField!
@IBOutlet weak var date: UITextField!

override func viewDidLoad() {}

@IBAction func nextScreen(sender: UIButton) {

if(eventLocation.text != nil){
self.performSegueWithIdentifier("firstSegue", sender: self)

} else {
let ac = UIAlertController(title: "Invalid Location", message:"Please enter a new location.", preferredStyle: .Alert)
ac.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))
presentViewController(ac, animated: true, completion: nil)
}
}
}



class pageTwo: UIViewController {


@IBOutlet weak var firstValue: UITextField!
@IBOutlet weak var secondValue: UITextField!


override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func backToStart(sender: UIButton) {
self.performSegueWithIdentifier("firstSegueReturn", sender: self)
}
}

segue 是否保持 View 的先前状态?这就是为什么当我通过“firstSegueReturn”返回第一个 View 时看到我在第一个 View 中输入的值的原因吗?但是,当我从第一个 View 返回时,为什么第二个 View 文本字段中的数据没有被保存?

最佳答案

因此 iOS 维护了一个导航栈。当您转到第二个 View 时,第一个 View 仍在导航堆栈中,因此它保留在内存中。当您从第二个 View 返回到第一个 View 时,第二个 View 将从内存堆栈中弹出,不再为其分配内存。这就是为什么当您返回到第二个 View Controller 时,您的值不再存在。

希望事情已经解决了。

关于ios - 通过 Segues 持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32777011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com