Данные теряются после смены просмотров - PullRequest
0 голосов
/ 17 сентября 2018

На экране A я собираю данные от пользователя и затем отображаю их на экране 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
    }
}

StoryBoard

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Это распространенная проблема.
Вам нужно передавать данные в каждый новый VC при его создании. Данные, которые вы хотите сохранить, могут быть переменной экземпляра в каждом VC.

Или вам нужно сохранить данные, которые вы хотите сохранить в NSUserDefaults или использовать Core Data. Если вы пойдете по этому пути, как только вы сохраните данные в одном из этих мест, вы сможете получить к ним доступ в любое время из любого места.

0 голосов
/ 17 сентября 2018

Затем я заметил, что если пользователь переходит на экран C, а затем обратно на экран B, данные исчезают.Как мне хранить данные там.

Я вижу две проблемы:

  1. Похоже, вы на самом деле не возвращаетесь к «экрану B»что ты ушел.Раскадровка показывает толчок перехода от B к C, а другой от C к B. Поэтому я думаю, что происходит то, что вы создаете еще один экран B, отдельный от первого.Вы должны изучить , чтобы развернуть пуш-сегу , а не добавлять еще один.Помните: экраны, которые вы создаете в раскадровке, не являются отдельными объектами - они больше похожи на шаблоны или прототипы объектов, и их можно создавать несколько раз.

  2. В целом,Хорошая идея - избегать хранения данных вашей программы в представлениях или даже в контроллерах представлений. M в MVC означает модель , которая должна быть отдельным объектом (или группой объектов), управляющим данными и бизнес-логикой для вашего приложения.Использование модели не решило бы проблему # 1, но все равно поможет вам избежать «эй, куда делись мои данные?»выпуски.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...