ViewController появляется для перехода дважды
Краткое описание проблемы
Мой mainVC -> второй переход VC, кажется, запускается дважды. Однако странным является то, что viewDidLoad второго VC запускается только один раз. Это единственный переход в моем проекте, который имеет эту проблему.
Я исследовал это и обнаружил проблемы с двойной загрузкой, но ни одна из них не соответствует моему переходу дважды, но сценарий загрузки один раз. Общие проблемы, например, когда кто-то добавил два сегмента в раскадровку, не отображаются в моем проекте:
В моем первом / корневом контроллере представления (называемом mainVC) я программно добавляю жест панорамирования края в viewDidLoad:
let panLeftEdgeGesture_MainVC = UIScreenEdgePanGestureRecognizer(target: self, action: "panLeftEdge_toLifeList:")
panLeftEdgeGesture_MainVC.edges = .Left
view.addGestureRecognizer(panLeftEdgeGesture_MainVC)
Когда пользователь смахивает этот жест панорамирования, он запускает функцию, вызывающую переход к моему следующему VC. Проблема в том, что переход VC появляется дважды, а затем все работает нормально после этого. Ничто не ломается и не падает. Если я нажму на свою пользовательскую кнопку возврата, откат назад к mainVC появится только один раз.
Эксперимент, чтобы пролить свет на причину
Вот странная часть: пытаясь понять, что было понятно, я вставил некоторый код println и вот что печатает консоль:
No matching prepareForSegue: So did nothing to prepare.
LifeList_CollectionView viewDidLoad did run
Pan segue from mainVC to Life Lists did run
No matching prepareForSegue: So did nothing to prepare.
Эта первая строка - запуск prepareForSegue. Он говорит «ничего не сделал», потому что в моем prepareForSegue он проверяет, какой segue запущен, и иногда он пропускает некоторый код. В этом случае prepareForSegue ничего не делает, кроме как печатает эту строку.
Вторая строка - это viewDidLoad второго ВК.
Третья строка кажется мне странной и не в порядке, но я не эксперт. То, что println находится в mainVC и печатает из функции, вызываемой жестом панорамирования, это функция, которая в первую очередь запускает переход. Почему бы это не напечатать до viewDidLoad 2-го ВК ?:
func panLeftEdge_toLifeList(sender: UIScreenEdgePanGestureRecognizer) {
performSegueWithIdentifier("segueToLifeLists", sender: nil)
println("Pan segue from mainVC to Life Lists did run")
}
Четвертая строка - это второй цикл подготовкиForSegue для основного контроллера. Тем не менее, я не вижу консоли, печатающей второй viewDidLoad, хотя визуально я вижу, что переход происходит дважды.
Любая идея, что может вызвать такое странное поведение или, по крайней мере, какие-либо уловки, чтобы остановить это поведение?