uiNavigationController推送视图控制器时出错

时间:2012-11-20 19:02:37

标签: iphone objective-c ios xcode cocoa-touch

  

可能重复:
  iphone - “Pushing the same view controller instance more than once is not supported” exception

我正在从1推送test2ViewController,如下所示,

self.controller2 = [[test2ViewController alloc] initWithNibName:@"test2ViewController" bundle:nil anUser:self.idUser];

[[self navigationController] pushViewController:self.controller2 animated:NO];

[self.controller2 release];

从2到1我再次初始化1之后弹出它(必须初始化)。

self.controller1 = [[test1ViewController alloc] initWithNibName:@"test1ViewController" bundle:nil anUser:self.idUser];

    [[self navigationController]  popToRootViewControllerAnimated:NO];

    [self.controller1 release];
当尝试再次从1推送2时,

和问题出现,应用程序因错误而崩溃,

Pushing the same view controller instance more than once is not supported

出错了什么?谢谢。

3 个答案:

答案 0 :(得分:1)

首先,您要创建另一个test2ViewController实例,这样每次更改视图时都会转到另一个实例。

你应该做什么:

if(!test2ViewController)
    secondView = [[test2ViewController alloc] init...];
[self navigationController pushViewController:secondView animated:NO];

并返回,简单地说:

[self.navigationController popViewControllerAnimated:NO];

PoppingtoRoot会让你弹出到第一个使用pushViewController方法的视图控制器。

答案 1 :(得分:0)

根据您发布的代码判断,您只需将一个视图控制器(controller2)推送到导航控制器。

popToRootViewControllerAnimated:将从堆栈中删除所有视图控制器,除了根视图控制器(在您的情况下似乎是controller2)。所以基本上什么也没做。

然后你尝试再次推送相同的视图controller2并且它失败了,因为正如错误消息所说,这是不允许的。

答案 2 :(得分:0)

您无需再次重新初始化viewController1;如果你从1推动viewController2,那么你只需要调用

[self.navigationController popToRootViewControllerAnimated:NO];

因为viewController1已经在堆栈中。这个方法的作用是删除堆栈上除第一个以外的所有viewControllers并返回到它。

如果viewController1不是rootView控制器,则应使用

[self.navigationController popViewControllerAnimated:NO];

它将仅弹出堆栈中最后一个推送的viewcontroller并显示其下方的那个。