В настоящее время у меня есть контроллер навигации, который содержит один контроллер вида и два контроллера табличного вида. Когда пользователь переходит ко второму контроллеру представления таблицы, он может нажимать элемент кнопки «+», который представляет собой другое табличное представление со статической ячейкой, содержащей текстовое поле. Пользователь может ввести текст и нажать «Готово», чтобы сохранить его. Когда мой метод-делегат вызывается, диспетчер представлений отклоняется и строка, введенная пользователем, добавляется к массиву во втором контроллере представления. Затем в представлении таблицы отображается введенный пользователем текст в ячейке таблицы. Массив передан в стек через метод prepareForSegue
. В настоящее время это работает, потому что я вижу строки в представлении таблицы, с которыми был создан массив в первом контроллере представления.Как передать данные с третьего контроллера просмотра Вернуться к первому виду контроллера?
Моя проблема возникает, когда пользователь переходит обратно вниз по стеку к любому контроллеру представления перед вторым видом таблицы, который содержит введенные пользователем строки, отображаемые в ячейках. Я успешно смог передать данные на предыдущий контроллер представления, очевидно, но после долгих исследований и испытаний я не смог успешно получить строку, введенную пользователем, для сохранения. Когда я перехожу к предыдущим контроллерам представления, а затем назад, перейдите во второе представление таблицы, данные, введенные пользователем, исчезли, и массив содержит только начальные данные.
Я понимаю, что массивы в Swift являются структурами и значения копируются при передаче стека. Это имеет смысл, почему данные, введенные пользователем, исчезают, когда я перехожу к предыдущему контроллеру представления. Предыдущий контроллер представления фактически не содержит данные, введенные пользователем. Означает ли это, что мне нужно добавить строку в массив в исходном контроллере представления вместо массива во втором контроллере представления таблицы? Если это так, я не знаю, как получить доступ к контроллеру начального представления с третьего контроллера.
Все документы и учебники, к которым я обращался, основаны на передаче данных с текущего контроллера представления назад на предыдущий контроллер представления, который является делегатом, который затем отклоняет контроллер представления, который принял вход.
Как передать введенную пользователем строку с последнего контроллера представлений обратно в контроллер исходного вида?
Контроллеры просмотра не должны знать, что контроллер родительского представления существует. Родитель может разговаривать с ребенком, но ребенок никогда не должен разговаривать с родителем. Если ребенок что-то меняет, он отправляет уведомление, а родитель берет его оттуда. –