Передача данных между VC


#1

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


#2

Код в студию будьте добры. А то помочь ничем не сможем. Мы не экстрасенсы


#3

Я так понимаю основная ошибка в передачи данных, собственно код:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let tabBarController = segue.destination as? UITabBarController else {return}
    let obyemVC = tabBarController.viewControllers?.last as! ObyemKonduktorViewController
    let navigationVS = tabBarController.viewControllers?.first as! UINavigationController
    let timeVC = navigationVS.topViewController as! TimeKonduktorViewController
    timeVC.chikl = String(zhikl)
    timeVC.prokachkaDoZaboy = String(prokachkaDoZaboy)
    obyemVC.primer = String(zhikl)
}

Переход и расчет ведется по нажатию одной кнопки.

VC на который ведется передача данных:

import UIKit

class TimeKonduktorViewController: UIViewController {

@IBOutlet weak var litrazhLabel: UILabel!
@IBOutlet weak var chiklLabel: UILabel!
@IBOutlet weak var zaboynayLabel: UILabel!
@IBOutlet weak var prokachkaDoZaboyLabel: UILabel!
@IBOutlet weak var poltoraChiklaLabel: UILabel!
@IBOutlet weak var dvaChiklaLabel: UILabel!

var litrazh: String?
var chikl: String?
var prokachkaDoZaboy: String?

override func viewDidLoad() {
    super.viewDidLoad()
    
    chiklLabel.text = chikl
    prokachkaDoZaboyLabel.text = prokachkaDoZaboy

}

}


#4

и сам MainStoryBoard:


#5

Попробовал с нуля частично сделать VC с которого идет передача данных все работает нормально. В чем проблема с этим VC так и не разобрался


#6

как вы принимаете данные? там могут быть нюансы с некоторыми методами


#7

весь ввод данных через UITextfieldы
далее объявлены переменные, в IBaction присваиваются расчеты с отдельного класса.
Хотя и упрощал данную конструкцию.


#8

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


#9

Мне кажется вся проблема в том, что вы пытаетесь передать данные в обход TabBarController.
А второй раз при переходе данные передаются возможно из-за того, что TabBarController не удалился из памяти.
Попробуйте сперва передать все данные в TabBarController, а уже потом из него в каждый ViewController.


#10

Проблему помог решить один знакомый: “Из-за того что ты перетянул сегвей от кнопки на экран, по нажатию на кнопку происходит переход раньше чем оно успевает посчитать, и в итоге мы не видим ничего в той переменной, а в следующий раз, они уже посчитаны , но это все ровно уже старые данные, если ты поменяешь какие-то цифры то оно так же не успеет пересчитать, и отобразит старые
Решение: перетянуть сегвей от контроллера к котроллеру, задать идентификатор сегвея, после, вызвать performSeque(with identifier: String, …), в экшэне кнопки, в конце, после того как все посчитается”


#11

Получается мы бы вам никак не смогли помочь, т.к. у вас не написано было как протянут сегвей.


#12

да я сам что то затупил)) что в этом может быть дело