2015-09-25 3 views
2

Итак, я пытаюсь понять упорство через segues в Свифте. У меня есть три текстовых поля, давайте назовем их имя, дату и местоположение в одном представлении. Я создаю две формы представления, поэтому после того, как я собираю эти точки данных (имя, дата, местоположение), я использую segue для перехода к следующему представлению с помощью кнопки, добавленной к первому виду.Стойкость через Segues

Затем я добавил кнопку возврата на следующем изображении, чтобы вернуться к исходному виду (с указанием полей имени, даты, местоположения). Я не понимаю, как сохраняются эти значения в полях. Я не добавил делегатов или добавил какое-либо соединение со вторым контроллером представления. Однако, когда я возвращаюсь к первому контроллеру представления со второго, значения (имя, дата, местоположение) сохраняются в соответствующих текстовых полях. Но если я добавлю что-то во второе текстовое поле контроллеров представления, вернитесь к первому, а затем перейдите назад ко второму, эти значения во втором не будут сохраняться.

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»? Но тогда почему не сохраняются данные во втором текстовом поле просмотра, когда я возвращаюсь к нему с первого?

+0

Ответ в вашем тексте. Вы переходите к чему-то новому и возвращаетесь туда, откуда пришли. Следовательно, segue forward - это новый контроллер, контент которого определяется тем, что вы задали в качестве содержимого по умолчанию или в вашем методе 'prepareForSegue'. Когда вы вернетесь назад, вы вернетесь туда, откуда вы пришли, у которого есть все исходное содержание. Поэтому подумайте о том, что контроллеры представлений создаются и складываются, когда вы выходите вперед и выпрыгиваете и отбрасываете назад. –

ответ

2

Итак, iOS поддерживает навигационный стек. Когда вы переходите к второму виду, первое представление все еще находится в стеке навигации, поэтому оно остается в памяти. Когда вы вернетесь к своему первому виду со второго, второе представление выскользнет из стека памяти и больше не выделяет память для него. Вот почему, когда вы возвращаетесь ко второму контроллеру просмотра, ваших значений больше нет.

Надеюсь, что это прояснит ситуацию.

+0

Не возражаете ли вы принять это за ответ? Благодаря! –

Смежные вопросы