Как сохранить данные из нескольких контроллеров представления в один основной объект данных

У меня есть объект, у которого есть атрибуты, которые заполняются из 5 контроллеров представления.

Приложение представляет собой анкету на основе подробной формы с 5 вопросами, и каждый из 5 контроллеров представления состоит из одного вопроса и своего набора вариантов ответов. В первых 4-х у пользователя есть вопросы с несколькими вариантами ответов. В последнем вопросе пользователь может выбрать несколько значений из набора параметров.

Я сохранил сущность для каждого контроллера представления, чтобы отображать параметры для этого контроллера представления.

Чтобы фиксировать ответы пользователя, я создал объект с именем Answer со строковыми атрибутами для ответа на первые 4 вопроса и отношениями с пятым объектом, чтобы я мог зафиксировать набор вариантов ответов, выбранных пользователем для 5-го вопроса.

Мне также нужно сохранять выбор пользователя, когда пользователь переходит от 1-го вопроса к 2-му и 3-му и так далее, а не за один раз, когда пользователь ответил на все вопросы.

Кроме того, пользователь может отказаться от ответов, если откроет экран первого вопроса.

Как лучше всего этого добиться?

Искал следующие варианты -

  1. Перед переходом к первому контроллеру представления вопроса создайте запись объекта ответа. Также контекст управляемого объекта (moc). Затем я сохраняю свойство moc в каждом из 5 контроллеров представления, а затем передаю moc, созданный до перехода к первому контроллеру, с первого контроллера на пятый контроллер вместе с управляемым объектом Answer. Сохраняйте этот moc всякий раз, когда пользователь переходит от одного вопроса к другому.
  2. Создайте тип DataCollector класса Singleton, где у меня есть метод init для создания записи объекта Answer и методы для создания moc и сохранения в moc. Затем из каждого вопроса я обращаюсь к этому управляемому объекту Answer, а также использую тот же moc.

Пожалуйста посоветуй.


person letsbondiway    schedule 11.07.2017    source источник
comment
Вариант 1 - это то, что я бы сделал.   -  person Paulw11    schedule 12.07.2017


Ответы (1)


Самый простой способ сделать это - просто передать все ответы по пути в следующий контроллер представления, используя метод prepare (for segue :). Вы бы сделали это, сказав

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        let secondScene = segue.destination as! (nextController)
        secondScene.answerQuestion1(declared variable in nextController) = (value you are transferring)
        }

Когда вы переходите к следующему UIView в контроллере представления, после объявления класса вы можете просто объявить переменную, в которой хотите сохранить значение, поэтому для UIView, соответствующего следующему вопросу,

class QuestionTwo: UIViewController {

    var answerQuestion1

    override func viewDidLoad() {
        super.viewDidLoad()

Повторите это для всех контроллеров представлений, и к тому времени, когда вы окажетесь на 5-м вопросе, у вас будут все ответы на первые 4 вопроса, а также на 5-й, после чего вы можете сохранить его в CoreData, а затем очистить значения из переменных.

person E. Chen    schedule 11.07.2017