@NONAME8

Как правильно передать значения в массив из другого VC?

Мне нужно добавлять строки в массив, полученные из TextField другого ViewController-a.
Но когда я это делаю то у меня постоянно перезаписывается последняя строка и все.

// ПЕРВЫЙ VIEW CONTROLLER
import UIKit
class ViewController: UIViewController {
    @IBOutlet var takeList: UITextField!
    var per:String=""

    @IBAction func passData(_ sender: Any) {
        per=takeList.text!
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let ViewController2 = segue.destination as! ViewController2
        ViewController2.list.append(per)
    }


//ВТОРОЙ VIEW CONTROLLER
class ViewController2: UIViewController {
    var list=["123","12431","12314"]
    @IBAction func print(_ sender: Any) {
        print(list) 
    }


как сделать так, чтобы у меня нормально добавлялись значения в массив ?
и не используя глобальный массив.
  • Вопрос задан
  • 473 просмотра
Решения вопроса 1
doublench21
@doublench21 Куратор тега Swift
Ты имеешь ввиду почему не сохраняются предыдущие добавленные строки в массиве? Если да, то любой вью контроллер создаётся и уничтожается по надобности. Ты переходишь на него, он создался. Уходишь с него, удалился(и данные в массиве тоже). Так что если тебе нужны все данные что были в UITextField и ты постоянно бегаешь туда сюда, то их надо где-то сохранять.

Что бы вообще передавать данные между двумя вью контроллерами, есть такая вещь как делегаты. К примеру UITableViewDataSource/UITableViewDelegate. Но передача в методе prepare тоже вполне себе нормальный вариант.

Если чего не понял, поясните.

Пример того как могут общаться классы:
dAll0IO.jpg
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
briahas
@briahas
ObjC, Swift, Python
Могу только предположить, что у тебя постоянно создается либо масив, либо вьюконтроллер.
Тут надо только дебажить код.
Поставь брекпоинт на строчке ViewController2.list.append(per) и проверь значение list до исполнения этой строчки и после.
Если на этом этапе все норм - иди назад по логике и ищи кто удаляет (создает заново массив) добавленные ранее значения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы