ViewController erscheint zweimal bei Übergang

Problemzusammenfassung

Meine Haupt-VC -> zweite VC-Transtion scheint zweimal zu laufen. Merkwürdig ist jedoch, dass viewDidLoad der zweiten VC nur einmal ausgeführt wird. Dies ist der einzige Übergang in meinem Projekt, bei dem dieses Problem auftritt.

Ich habe dies recherchiert und Probleme mit zweimaligem Laden festgestellt, aber keines passt zu meinem Übergang mit zweimaligem Laden, sondern nur mit einmaligem Laden. Häufige Probleme, wie z. B. das Hinzufügen von zwei Segmenten im Storyboard, werden in meinem Projekt nicht angezeigt:

In meinem ersten / root-Ansichtscontroller (mainVC) füge ich programmgesteuert eine Edge-Pan-Geste in viewDidLoad hinzu:

        let panLeftEdgeGesture_MainVC = UIScreenEdgePanGestureRecognizer(target: self, action: "panLeftEdge_toLifeList:")
        panLeftEdgeGesture_MainVC.edges = .Left
        view.addGestureRecognizer(panLeftEdgeGesture_MainVC)

Wenn der Benutzer diese Pan-Geste wischt, wird eine Funktion ausgelöst, die einen Übergang zu meiner nächsten VC aufruft. Das Problem ist, dass der VC-Übergang zweimal auftritt und danach alles gut funktioniert. Nichts bricht oder stürzt ab. Wenn ich auf die Schaltfläche "Zurück" klicke, wird der Rücksprung zu mainVC nur einmal angezeigt.

Experiment, um Licht in die Sache zu bringen

Hier ist der seltsame Teil: Um zu verstehen, was verstanden wurde, habe ich einen println-Code eingefügt und hier ist, was die Konsole ausgibt:

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.

In dieser ersten Zeile wird prepareForSegue ausgeführt. Es heißt "nichts getan", weil in meinem prepareForSegue überprüft wird, welches Segue ausgeführt wird, und manchmal wird Code übergeben. In diesem Fall gibt prepareForSegue nur diese Zeile aus.

Die zweite Zeile ist die ViewDidLoad der zweiten VC.

Die dritte Zeile kommt mir komisch und kaputt vor, aber ich bin kein Experte. Dieser Ausdruck befindet sich in der Haupt-VC und wird von der Funktion gedruckt, die von der Schwenkgeste aufgerufen wird. Dies ist die Funktion, die den Übergang an erster Stelle ausgelöst hat. Warum sollte dies nicht vor dem viewDidLoad des 2. VC gedruckt werden?:

func panLeftEdge_toLifeList(sender: UIScreenEdgePanGestureRecognizer) {
    performSegueWithIdentifier("segueToLifeLists", sender: nil)
    println("Pan segue from mainVC to Life Lists did run")
}

Die vierte Zeile ist die PrepareForSegue des MainVC, die ein zweites Mal ausgeführt wird. Ich sehe jedoch nicht, dass die Konsole ein zweites viewDidLoad druckt, obwohl ich den Übergang visuell zweimal sehe.

Ist eine Idee, was solch ein merkwürdiges Verhalten oder zumindest irgendwelche Tricks verursachen könnte, um dieses Verhalten zu stoppen?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage