Reçois des “Déséquilibrés appels de début/fin de l'apparence de transitions pour les <ViewController>” erreur
J'ai une application qui est presque fonctionne parfaitement. Voici comment mon application est structurée:
6 total des Contrôleurs de Vue sur le storyboard. Les 3 premiers Afficher les Contrôleurs sont les plus importants. La Vue initiale du Contrôleur comporte des boutons pour "Login" et "Inscription". Le bouton "Connexion" modal présente une Vue Login et le Contrôleur "Inscrivez-vous" bouton modal présente une Inscription-Vue-Contrôleur.
L'Inscription-Vue-Contrôleur dispose de 3 champs pour le nom d'utilisateur, mot de passe et e-mail, puis un bouton "soumettre". Le bouton soumettre soumet les données de mon serveur web et si tout ce que fait valoir avec succès qu'il appelle le "performSegueWithIdentifier" méthode sur elle-même.
Voici l'énoncé:
[self performSegueWithIdentifier:@"superSegue" sender:self];
J'ai passé 2 heures ce soir, en essayant d'obtenir le au-dessus de l'appel de la méthode de travail et il a finalement fait le travail. Pour le faire fonctionner, j'ai dû choisir mon Inscription-Vue-Contrôleur sur la table de montage séquentiel et aller à l'Éditeur de > Intégrer Dans > manette de Navigation (Si je me souviens bien j'ai eu à le faire car le inscription-vue-contrôleur est présenté sous forme modale). J'ai ensuite glissé de mon Inscription à la Vue du Contrôleur de bouton soumettre à l'avis du Contrôleur, je veux pousser choisi de Pousser et puis tapé dans un nom d'identificateur.
De toute façon, tous les ci-dessus fonctionne parfaitement bien jusqu'à ce que j'essaie d'utiliser le bouton de retour sur la Vue-Contrôleur que nous avons poussé à l'aide de l'appel de méthode. Si je tape sur le bouton de retour, il va à un 90% écran noir avec un vide de la barre de navigation en haut avec un bouton de retour et bien sûr que le bouton ne fait rien ainsi.
C'est l'erreur que j'obtiens dans la console:
Unbalanced calls to begin/end appearance transitions for <VerificationViewController: 0x14ed1bb0>
De vérification de la Vue-Contrôleur est le point de Vue Contrôleur que l'Inscription-Vue-Contrôleur pousse à travers le performSegueWithIdentifier méthode.
Personne ne sait comment je peux corriger cette erreur?
J'ai joint une capture d'écran ci-dessous de ce que mon storyboard ressemble dans xcode. Il y a une-vue-contrôleur que j'ai codé, mais pas connecté et ne devrait pas faire une différence, de toute façon, de sorte que vous pouvez ignorer le point de Vue du Contrôleur à la droite de la Connexion VC.
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la réponse ce matin dans un autre stackoverflow question. La réponse peut être trouvée ici.
Quand j'avais à l'origine de l'installation de la Pousser Segue, j'ai cliqué sur et traîné à partir d'un bouton, et a également été l'appel de la performSegueWIthIdentifier méthode à l'intérieur de ce bouton est IBAction méthode de la mise en œuvre. Cela a été l'origine de 2 identiques pousser enchaîne à être exécuté sur le bouton appuyez sur. Je viens de quitter mon appel de méthode dans la IBAction, supprimé l'ancien pousser segue, et a créé un nouveau push segue seulement cette fois, j'ai cliqué sur et traîné hors de la Vue d'ensemble du Contrôleur à la place de son bouton.
J'ai résolu ce problème en les enveloppant dans ce.
presentViewController(_:animated:completion)
sur une base (racine) - vue-contrôleur de l'intérieurAppDelegate applicationDidBecomeActive(_:)
...avant que la vue de la racine du contrôleur de la fenêtre de hiérarchie a été établie. N'ont plus à se reporter à la présentation jusqu'à la racine du contrôleur deviewDidLoad(animated:)
...une vilaine découplage de vue de la gestion. Merci!popViewController(animated:)
Dans mon cas, c'était une sous-classe de
UITabBarController
avec une surchargesetSelectedIndex:
méthode qui fait la transition avec une animation.J'ai trouvé que la suite doit être appelée avant que l'animation de démarrage:
Et la suivante à la fin du bloc:
Le problème peut toujours se produire si plusieurs selectedIndex changements se produisent avant les animations de fin.
beginAppearanceTransition
etendAppearanceTransition
méthodes à la place de l'appelant directementviewWillDisappear
/viewWillAppear
etviewDidDisappear
/viewDidAppear
. La documentation de l'apparition de la transition méthodes suggèrent de ne pas invoquerviewWillAppear
, etc. directement pour enfant vues.Dans mon cas, cet avertissement a été causé par l'appel de
popToRootViewController
de UINavigationController tout en modal avis a été affiché.Quand j'ai déménagé
popToRootViewController
après modal vue rejeté, avertissement arrêt.Raison De l'Erreur : Ce message s'affiche si vous appuyez sur/de présenter un autre point de Vue contrôleur de viewWillAppear,loadView,init ou méthode viewDidLoad de la Vue en cours Contrôleur
Solution : Déplacez votre poussant/présentation de code à viewDidAppear méthode permettra de résoudre le problème
La raison est la suivante : dans le viewDidLoad pas tous de la fantaisie des animations ont déjà été terminé, alors que dans viewDidAppear tout est fait.
J'ai travaillé et c'est bon pour moi
Raison De l'Erreur : Ce message s'affiche si vous appuyez sur/de présenter un autre point de Vue contrôleur de TabBarController,
Solution : veuillez indiquer
viewController.modalPresentationStyle = .overCurrentContext
, puis de présenterviewController
topViewController.present(vc, animated: true, completion: nil)