prepare(for:sender:) – apelare de doua ori?

Sunt in urmatorul scenariu: un buton din ViewController-ul A – VCA este legat prin segue cu prezentare modala de un ViewController B – VCB.

In VCA am definit metoda prepare(for:sender:)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "asSegue" {
.....
}

Practic definesc ce anume fac atunci cand se va produce click pe butonul ce va aduce modalul VCB.

Din exces de zel fac urmatoarea greseala: In VCA, deci in ViewControllerul mama spun ca atunci cand se da click pe butonul care are atasat segue sa activez urmatoarea metoda:
performSegue(withIdentifier: "visibilitiesSegue", sender: self)

Totul merge bine si frumos, la click pe butonul din VCA apare modalul VCB, imi fac treaba si e perfect! Numai ca in consola am un pic warning:
Warning: Attempt to present VCB on VCA which is already presenting (null)
Nu m-ar deranja prea tare daca nu as vrea sa am consola curata de warning-uri.

Caut la Apple despre performSegue si aflu ca
“Normally, segues are initiated automatically and not using this method.”

Ce gresesc?

Metoda prepare(for:sender:) este apelata de doua ori, o data automat atunci cand eu dau click si se produce implicit prezentarea lui VCB si a doua oara cand eu i-am specificat faptul ca la click de buton trebuie sa activeze performSegue(withIdentifier:sender:)

Solutia?

Elimin de la executie performSegue(withIdentifier:sender:) deoarece atunci cand se face click pe buton pentru a prezenta VCB automat este executata prepare(for:sender:)

Share Button

Stefan

Leave a Reply

Your email address will not be published. Required fields are marked *