Continuer à recevoir des "appels non équilibrés pour commencer / terminer les transitions d'apparence pour l'erreur <ViewController>"

J'ai une application qui fonctionne presque parfaitement. Voici comment mon application est structurée:

6 Total View Contrôleurs sur le storyboard. Les 3 premiers controllers de vue sont les plus importants. Le View Controller initial a des buttons pour "Login" et "Inscription". Le button "login" présente de manière modale un controller de vue de connection et le button "Inscription" présente de manière modale un controller de vue d'inscription.

Le controller de vue d'inscription a 3 champs pour le nom d'user, mot de passe, et email, puis un button "soumettre". Le button submit soumet datatables à mon server web et si tout se passe correctement, il appelle la méthode "performSegueWithIdentifier" sur lui-même.

Voici la déclaration:

[self performSegueWithIdentifier:@"superSegue" sender:self]; 

J'ai passé 2 heures ce soir à essayer de faire fonctionner l'appel de méthode ci-dessus et ça marche finalement. Pour le faire fonctionner, je devais sélectionner mon controller d'affichage Signup sur le storyboard et aller à Editor> Embed In> Navigation Controller (Si je me souviens bien, je devais le faire parce que le controller de vue d'inscription est présenté de manière modale). J'ai ensuite déplacé de mon button de soumission Signup View Controller vers le controller de vue que je veux pousser et sélectionné Push, puis tapé un nom d'identifiant.

Quoi qu'il en soit, tout ce qui précède fonctionne parfaitement bien jusqu'à ce que j'essaie d'utiliser le button de return sur le View Controller que nous avons poussé à utiliser l'appel de la méthode. Si j'appuie sur le button de return, il va à un écran noir de 90% avec une barre de navigation vierge en haut avec un button de return et bien sûr ce button ne fait rien aussi bien.

C'est l'erreur que je reçois dans la console:

 Unbalanced calls to begin/end appearance transitions for <VerificationViewController: 0x14ed1bb0> 

Verification View Controller est le controller de vue auquel le controller de vue d'inscription appuie via la méthode performSegueWithIdentifier.

Est-ce que quelqu'un sait comment je peux réparer cette erreur?

J'ai inclus une capture d'écran ci-dessous de ce à quoi ressemble mon storyboard dans xcode. Il y a un controller de vue que j'ai codé mais pas encore connecté et qui ne devrait pas faire de différence de toute façon afin que vous puissiez ignorer le controller de vue à la droite du VC de connection.

entrez la description de l'image ici

J'ai trouvé la réponse ce matin dans une autre question de stackoverflow. La réponse peut être trouvée ici .

Lorsque j'avais initialement configuré le Segue Push, j'ai cliqué sur et fait glisser à partir d'un button, et j'appelais également la méthode performSegueWIthIdentifier à l'intérieur de l'implémentation de la méthode IBAction de ce button. Cela provoquait l'exécution de deux pages de touches identiques sur le button. Je viens de quitter mon appel de méthode dans l'IBAction, j'ai effacé l'ancienne séquence de push, et j'ai créé une nouvelle session de push seulement cette fois-ci j'ai cliqué et glissé de l'set du View Controller au lieu de son button.

J'ai résolu ce problème en l'enveloppant.

 dispatch_async(dispatch_get_main_queue()) { //call your performSegueWithIdentifier in here } 

Dans mon cas c'était une sous-class de UITabBarController avec une méthode setSelectedIndex: surchargée setSelectedIndex: qui fait la transition avec une animation. J'ai trouvé que ce qui suit doit être appelé avant le début de l'animation:

 [sourceVC viewWillDisappear:YES]; [destinationVC viewWillAppear:YES]; 

Et ce qui suit dans le bloc d'achèvement:

 if (finished) { [sourceVC viewDidDisappear:YES]; [destinationVC viewDidAppear:YES]; [super setSelectedIndex:selectedIndex]; } 

Le problème peut toujours se produire si plusieurs modifications selectedIndex se produisent avant la fin des animations.

Dans mon cas, cet avertissement a été provoqué en appelant popToRootViewController de UINavigationController alors que la vue modale était affichée. Lorsque j'ai déplacé popToRootViewController après l'affichage modal, l'avertissement stop apparaît.

Raison de l'erreur : Ce message s'affiche si vous appuyez sur / présentez un autre controller View à partir de la méthode viewWillAppear, loadView, init ou viewDidLoad du View Controller en cours

Solution : Déplacez votre code pushing / presentation vers la méthode viewDidAppear pour résoudre le problème

La raison est la suivante: dans viewDidLoad, toutes les animations de fantaisie ne sont pas terminées, alors que dans viewDidAppear tout est fait.

Je l'ai travaillé et c'est bon pour moi Raison de l'erreur: Ce message s'affiche si vous poussez / présente un autre controller View de TabBarController, Solution: veuillez définir viewController.modalPresentationStyle = .overCurrentContext , puis présenter viewController topViewController.present(vc, animated: true, completion: nil)