开发者

Pushing View Controller more than once is not supported?

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 开发者_StackOverflow中文版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>)'


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.


just an FYI, if you call setViewControllers:animated: there's no need to call pushViewController: afterwards, else you'll get the "Pushing the same view controller instance more than once is not supported" crash.


            @try {
               [self.navController pushViewController:viewController animated:NO];
            } @catch (NSException * e) {
                NSLog(@"Exception: %@", e);
                 [self.navigationController popToViewController:viewController animated:NO];
            } @finally {
                //NSLog(@"finally");
            }


Check this condition before push

if (![[self.navigationController topViewController] isKindOfClass:[YOURCONTROLLER class]])
    [self.navigationController pushViewController:YOURCONTROLLER animated:YES];
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜