Не удается передать данные из ViewController в TableViewController


#1

Всем привет, пытаюсь реализовать передачу данных между контроллерами, уже делал так, но сейчас столкнулся с проблемой, что при нажатии на кнопку сохранить получаю nil, в чем может быть проблема?

Для начала создаю протокол:

protocol SomeProtocol {
    func setName(_ valueName: String)
}

После этого, во-втором контроллере (в том из которого данные уходят), пишу следующее:
var delegate: SomeProtocol?

и по нажатию на кнопку, делаю так:

@IBAction func saveButton(_ sender: UIButton) {
        delegate?.setName(nameTextField.text!)
    }

На этом этапе получаю nil, данные для принятия в первом контроллере готовы, осталось с этим только разобраться, заранее спасибо)


#2

А что вы прописали в первом контроллере? Вообще, в этом видео описывается ваша ситуация:


#3

В первом у меня расширение контроллера идет:

extension MyTableViewController: SomeProtocol {
    func setName(_ valueName: String) {
        let item = ModelName(name: valueName)
        arrayData.append(item)
    }
}

Но проблема именно в том, что до этого этапа даже не доходит


#4

так вы при переходе на второй экран, в delegate записываете ссылку?


#5

ну я вот создал segue:

@IBAction func addNewUser(_ sender: UIBarButtonItem) {
        performSegue(withIdentifier: "edit", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard segue.identifier == "edit" else { return }
        guard let destination = segue.destination as? EditViewController else { return }
        
        destination.delegate = self
    }

Но все-равно не работает, или вы не это имели ввиду?


#6

Не очень понятно что Вы передаете во второй контроллер.
И зачем такая сложная схема с расширениями?

Не проще так? Вы передаете туда строку все равно.

@IBAction func saveButton(_ sender: UIButton) {
        arrayData.append(nameTextField.text!)
    }

#7

Я же передаю в предыдущий контроллер, а не в следующий, но с нилом проблему решил

Можно как-то данные в массиве обновлять, по какому то условию?


#8

Так тогда Вам Unwind segue использовать надо.


#9

Сделал проще, все решалось так:
override func viewWillAppear(_ animated: Bool) {
tableView.reloadData()
}


#10

Это кривой путь, хоть и решает Вашу задачу)