У меня была похожая проблема, связанная с перемоткой модальных диалогов. Разместил решение здесь ...
https://stackoverflow.com/a/38795258/324479
[Проблема]
Nav Controller -> VC1 -Push -> VC2 -PopOver или Modal Segue -> VC3.
VC3 возвращается к VC1.
Когда Segue от VC2 до VC3 имеет PopOver и Modal, размотка заканчивается предупреждением: несбалансированные вызовы для начала / окончания переходов внешнего вида для UIViewController "
Если переход от VC к VC нажат, предупреждение исчезнет.
[Решение]
Было бы здорово, если бы логика раскрутки позаботилась об этом. Может быть, это ошибка, а может и нет. В любом случае, решение состоит в том, чтобы сделать VC2 (контроллер, у которого есть всплывающее окно) целью перемотки, затем подождать, пока он не появится, прежде чем вызвать навигационный контроллер. Это гарантирует, что анимация перемотки (обратного всплывающего окна) имеет достаточно времени для завершения, прежде чем двигаться дальше назад. Даже если анимация отключена, она все равно должна подождать, иначе вы получите ошибку.
Ваш код для VC2 должен быть следующим. (Swift)
class VC2: UIViewController {
private var unwind = false
@IBAction func unwindToVC1(segue:UIStoryboardSegue) {
unwind = true
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if unwind {
self.navigationController?.popViewControllerAnimated(false)
}
}
}