web-dev-qa-db-fra.com

Avertissement "Appels non équilibrés pour commencer/terminer les transitions d'apparence" lorsque Push une vue de manière modale dans XCode 4 avec Storyboard

Après quelques recherches sur le Web sans succès, je viens ici pour vous poser la question de mon avertissement.

En fait, j'ai une vue V1 avec un contrôleur de navigation et je veux pousser une vue modale V2 lorsque le chargement de V1 est terminé . J'utilise donc la méthode performSegueWithIdentifier (j'utilise le storyboard) . Voici mon code :

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

Et quand je compile, je reçois cet avertissement:

Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x6849b30>

Quelqu'un peut-il m'aider?

26
Vinestro

On dirait que vous effectuez probablement la transition dans -viewWillAppear:, générant ainsi deux messages -viewWillAppear: sans 2 messages -viewDidAppear correspondants.

Essayez d'effectuer la transition dans -viewDidAppear.

57
Mark Adams

'Appels non équilibrés pour commencer/terminer les transitions d'apparence'

Dit qu'une animation est commencée avant que la dernière animation en rapport ne soit pas terminée . Alors, est-ce que vous ouvrez un contrôleur de vue avant de pousser le nouveau? Si oui, essayez de le faire sans animation [self.navigationController popToRootViewControllerAnimated: NO];

Et voir si cela résout le problème, Dans mon cas, cela a fait l'affaire.

5
infiniteLoop

J'ai eu ce problème, mais ce que j'avais fait est sur un UIViewController j'avais lié un Segue à un UIButton et l'avais aussi codé dans une fonction nextBtnPressed:, donc je poussais en fait deux nouveaux UIViewControllers sur la pression d'un bouton. Le limiter à la seule division corrigée. Mais il a fallu des recherches pour voir que j'avais fait le double.

5
DonnaLea

Les raisons en sont multiples et très spécifiques au contexte et à la programmation. Par exemple, ce que je faisais était

  1. initialisation d'un fichier son, lecture (asynchrone) de 1,4 seconde, 
  2. faire bouger une image sur l'écran en utilisant une animation programmée pour durer 1,4 seconde et,
  3. avec une minuterie réglée à 1,4 seconde après l’étape 2, en appuyant sur un contrôleur de vue.

Ce que j’ai découvert, c’est que si je n’ai PAS les instructions pour ces 3 étapes l’une après l’autre (si je les mélange), alors j’obtiens l’erreur "Appels non équilibrés ..." De plus, si je chronomètre la Push du viewcontroller à moins de 1,4 seconde, je reçois aussi le message.

Donc, vérifiez que la séquence et le timing des instructions de votre programme sont corrects.

1
Anjaan