Pushing View Controller more than once is not supported?

SimplyKiwi picture SimplyKiwi · Sep 11, 2011 · Viewed 11.8k times · Source

I am getting the following error whenever I try to switch views like this:

-(void)changeView1ToView4 {
    [self.navigationController1 pushViewController:view4 animated:YES];
}

This doesn't happen when the app first loads and user goes directly to this view. This crash only happens when I go to one of my other views, come back to the main menu, and then try to go to this view.

Also if you weren't sure already, I am using a UINavigationController. Also this code is in the app delegate and I am calling it from a view controller which has a parent view so I am using a .reference to call it like this:

[self.reference changeView1ToView4];

Is there any real way to fix this?

Thanks!

Edit1:

[self.navigationController1 pushViewController:view4 animated:NO];
[self.navigationController1 pushViewController:view4 animated:YES];

I tried that and got this crash message in the console:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Pushing the same view controller instance more than once is not supported (<View2: 0x18d540>)'

Answer

CodaFi picture CodaFi · Sep 16, 2011

When pushing 2 views onto the stack, try to call:

[self.navigationController1 pushViewController:view4 animated:YES];

and

[self.navigationController1 pushViewController://secondviewcontrollername// animated:NO];

If you try to push more than one view with the animated: field set to YES on both, then you confuse the stack. Only animate one view at a time.