Я публикую это с большим трепетом. Это, безусловно, немодный ответ. У меня слабое понимание делегатов и протоколов. В его защиту это прямое решение проблемы.
Следующая функция находится в вызывающем ViewController.
var dialogSemaphore объявлен как глобальный за пределами класса с начальным значением 3.
dialogSemaphore обновляется до 4, когда пользователь нажимает «Сохранить» во всплывающем диалоговом окне и переходит к ViewHistory viewController. Следующая функция () вызывается непосредственно перед запуском диалога. Дополнительная задержка позволяет выполнить любые процедуры до того, как произойдет фактический переход.
func nextIteration() {
print ("dialogSemaphore = \(dialogSemaphore)")
switch (dialogSemaphore){
case 3:
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
self.nextIteration()
}// wait 1 sec
break
case 4:
dialogSemaphore = 5
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
self.nextIteration()
}// wait 1 sec
break
case 5:
performSegue(withIdentifier: "SegueToViewHistory", sender: nil)
dialogSemaphore = 3 // back to neutral
break
default:
print ("wtf \(dialogSemaphore)")
break
}
}