What to do about "Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted."

Trott picture Trott · Mar 24, 2011 · Viewed 15.9k times · Source

I'm writing an iPhone app using Appcelerator Titanium Mobile. I am hiding and showing the tab group based on what window has focus.

dashWin.addEventListener("focus",function(e) {
    if (dashWin.tabGroupVisible == true) {
        dashWin.tabGroupVisible=false;
        tabGroup.animate({bottom:-50,duration:500});
    }
});

The code above hides the tab group when dashWin receives a focus event. However, I see this message in the Titanium console when the event fires while running in the iPhone simulator:

Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

A Google search turns up one result: Another StackOverflow question that may have a hint as to what's going on.

Answer

Brian picture Brian · Jan 27, 2014

I got this error when I linked Action Segue or Selection Segue from one view to another view through storyboard and performed the same segue programmatically again, which makes the navigation controller perform the same segue twice.

2 solutions for this case:

  1. Removing the code that pushes the view. Just let storyboard perform the segue for you. This is good for most situations.
  2. Replacing Action Segue or Selection Segue with Manual Section and do - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender by yourself. You may find this solution useful when you want to customize the behavior of segue according to the sender.