Делегирование: не удается передать данные из одного контроллера в другой. SWIFT

Здравствуйте мне нужно перенести структуру из одного контроллера в другой, при помощи делегирования, но что то не получается.

У меня есть 2 вью контроллера: 1-таблица, которую я подписал на делегат, с функцией принять структуру:

protocol AddItemDelegate {
func addItemToArrey(_ addExpences: AddExpences, didAddItem item : Item )
}
class ViewControllerApp: UIViewController, AddItemDelegate {
let addExpencesVC = AddExpences()
var items = [Item]()
let cellId = "My cell"

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

func addItemToArrey(_ addExpences: AddExpences, didAddItem item: Item) {
    items.append(item)
    tableViewApp.reloadData()
    print("------ \(items)")
}
@IBOutlet weak var tableViewApp: UITableView!
    override func viewDidLoad() {
    super.viewDidLoad()
    addExpencesVC.delegate = self   
}
@IBAction func AddButtonPressed(_ sender: UIBarButtonItem) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "AddingExpenceVC")
    self.present(vc!, animated: true, completion: nil)
} }

Настраиваю таблицу

extension ViewControllerApp: UITableViewDataSource, UITableViewDelegate {

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
}

Передаю в ячейку таблицы данные из экземпляра структуры

    let item = items [indexPath.row]
    cell.ExpenceLabelName.text = item.name
    let preQuantity = item.quantity
    let quantity = String(preQuantity)
    cell.ExpenceLabeQuantity.text = quantity
    cell.ExpenceImage.image = UIImage(named: "image-3")
    return cell
}

}

И 2 всплывающее окно с формой для заполнения данных структуры с кнопкой "Сохранить".

class AddExpences: UIViewController {

Указываю делегат класса

var delegate: AddItemDelegate?
var pickture: UIImage?

@IBAction func saveCklicked(_ sender: UIButton) {

/// Через аутлеты передаю информацию в структуру

    let name = expenceNameTextField.text ?? " "
    
    let preQuantity = expenceQuantityTextField.text ?? " "
    let quantity = Int(preQuantity)!
    
    let prePrice = expencePriceTextField.text ?? " "
    let price = Int(prePrice)!
    
    let defaultImg = UIImage(named: "image-3")
    var image: UIImage{
        if pickture != nil {
            return pickture!
        } else {
            return defaultImg!
        }
    }

/// Создаю новый экземпляр структуры

    let newItem = Item(name: name, quantity: quantity, price: price, image: image)
      print("//////\(newItem)")

/// Передаю экземпляр делегату

    delegate?.addItemToArrey(self, didAddItem: newItem)
    dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
    super.viewDidLoad()
}

}

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


Ответы (1 шт):

Автор решения: Oleg Soloviev

У вас экземпляр AddingExpenceVC создается вот здесь:

let vc = storyboard?.instantiateViewController(withIdentifier: "AddingExpenceVC") as? AddingExpenceVC

Поэтому делегата нужно указать тоже здесь:

vc?.delegate = self 

И тогда это не нужно:

let addExpencesVC = AddExpences()
addExpencesVC.delegate = self
→ Ссылка