“Unbalanced calls to begin/end appearance transiti

2019-01-11 16:41发布

问题:

After some research on the web without success, I come here to ask you the question about my warning.

Actually, I have a view V1 with a navigation controller and I want to push a modal view V2 when V1 has finished loading. So I use the performSegueWithIdentifier method (I'm using storyboard). Here is my code:

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

And when I compile, I got this warning:

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

Can anyone help me?

回答1:

It sounds like you may be performing the segue in -viewWillAppear: thus generating two -viewWillAppear: messages without 2 corresponding -viewDidAppear messages.

Try performing the segue in -viewDidAppear.



回答2:

I had this problem, but what I had done is on a UIViewController I had linked a Segue from a UIButton and also coded it into a nextBtnPressed: function, so I was actually pushing two new UIViewControllers on the one button press. Limiting it to just the one segue fixed it. But it took some investigating to see that I had done this double up.



回答3:

'Unbalanced calls to begin/end appearance transitions for '

Says an animation is started before the last related animation isnt done. So, are you popping any view controller before pushing the new one ? Or may be popping to root ? if yes try doing so without animation i.e. [self.navigationController popToRootViewControllerAnimated:NO];

And see if this resolves the issue, In my case this did the trick.



回答4:

The reasons for this are manifold and are very specific to the context and the programming. For example, what I was doing was

  1. initialising a sound file, playing it (asynchronously) for 1.4 seconds,
  2. making an image move across the screen using animation timed to last 1.4 seconds and,
  3. with a timer set to 1.4 seconds after step 2, pushing a viewcontroller.

What i discovered is that if I DO NOT have the instructions for these 3 steps one after the other (if I mix them up), then I get the error "Unbalanced calls...". Also, if I time the push of the viewcontroller to less than 1.4 seconds, I get the message as well.

So, check that the sequence and timing of your program instructions are correct.