Я предполагаю, что вы связали переход, который идет к DashBoardViewController на вашем submitButton от Interface Builder, что означает, что когда вы нажимаете на кнопку submit, вызывается @IBAction func submitButton(_ sender: UIButton) { }
, где вы проверяете, если ваш пароль хорошо, и если это так, вы звоните validateEventPasscode()
, который вызывает конечную точку API (асинхронно), и только там вы заполняете self.event = event
(строка 187 в ViewController.swift).
Теперь, что действительно происходит, так это то, что когда вы связываете переход от кнопки с помощью IB (построителя интерфейса), будет внутренний переход выполнения, который мы должны прекратить, переопределяя следующий метод в ViewController.swift : источник
func shouldPerformSegue(withIdentifier identifier: String,
sender: Any?) -> Bool {
return false
}
Таким образом, ваш звонок по линии 190 - ViewController.swift:
self.performSegue(withIdentifier: "showEventDashboard", sender: self)
тот, кто стреляет:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "DashBoardViewController" {
let dashBoardController = segue.destination as! DashBoardViewController
dashBoardController.event = event
dashBoardController.passcode = passcode
}
}
Вы можете проверить мою теорию, поместив три точки останова в ViewController.swift :
- строка 134 в validateEventPasscode () из функции submitButton IBAction;
- строка 190 в self.performSegue (withIdentifier: "showEventDashboard", sender: self) из validateEventPasscode () func;
- строка 108 в dashBoardController.event = событие из функции prepare (для segue, отправителя);
Багги в порядке исполнения: 1, 3, 2 - на данный момент этого можно ожидать, если моя теория верна;
Желаемый порядок исполнения: 1, 2, 3.
Короче говоря, вы заполняете self.event
после perfomSegue
и переходите к следующему экрану , поэтому ваш event
равен ноль в следующем VC .
Я использовал в качестве ссылки файл ViewController.swift из вашего репозитория: ViewController.swift
Надеюсь, это поможет, ура!