通过Segues持久化

时间:2015-09-25 07:30:11

标签: ios swift

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

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

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是否保持视图的先前状态?这就是为什么当我通过“firstSegueReturn”返回时,我看到我在第一个视图中输入的值?但是,当我从第一个文本字段中返回时,为什么不保存第二个视图文本字段中的数据?

1 个答案:

答案 0 :(得分:2)

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

希望能够解决问题。