首页
学习
活动
专区
圈层
工具
发布

持久化
EN

Stack Overflow用户
提问于 2015-09-25 07:30:11
回答 1查看 127关注 0票数 2

所以我试着通过斯威夫特的语言来理解坚持。我有三个文本字段,让我们在一个视图中调用它们的名称、日期和位置。我正在创建一个两个视图表单,所以在收集这些数据点(名称、日期、位置)之后,我将使用一个segue通过添加到第一个视图的按钮转换到下一个视图。

然后,我在下一个视图上添加了一个后退按钮,以返回到原始视图(w/名称、日期、位置字段)。我不明白的是这些字段中的值是如何持久化的。我没有添加任何委托,也没有添加任何与第二个视图控制器的连接。但是,当我从第二个视图返回到第一个视图控制器时,值(名称、日期、位置)将持久化在它们各自的文本字段中。但是,如果我向第二个视图控制器文本字段添加了一些内容,返回到第一个视图,然后再移回第二个视图控制器文本字段,那么第二个视图控制器文本字段中的值就不会持久。

代码语言:javascript
复制
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) 
    }
}

是否保持视图的先前状态?这就是当我通过"firstSegueReturn“返回到第一个视图时看到输入的值的原因吗?但是为什么当我从第一个视图返回到第二个视图文本字段时没有保存它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-25 07:37:53

因此,iOS维护一个导航堆栈。当您访问第二个视图时,第一个视图仍然在导航堆栈上,因此它仍然保存在内存中。当您从第二个视图返回到第一个视图时,第二个视图将从内存堆栈中弹出,并且不再为其分配内存。这就是为什么当您返回到第二个视图控制器时,您的值不再存在。

希望这能把事情弄清楚。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32777011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档