0

可能重复:
iphone - “不支持多次推送同一个视图控制器实例”异常

我正在正确地从 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

做错了什么?谢谢你。

4

3 回答 3

1

好吧,首先您要创建另一个 test2ViewController 实例,因此每次更改视图时都会转到不同的实例。

你应该做什么:

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

并返回,简单地说:

[self.navigationController popViewControllerAnimated:NO];

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

于 2012-11-20T19:09:46.853 回答
0

从您发布的代码来看,您只需将一个视图控制器(controller2)推送到导航控制器。

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

然后您尝试再次推送相同的视图控制器 2,但它失败了,因为正如错误消息所述,这是不允许的。

于 2012-11-20T19:07:06.327 回答
0

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

[self.navigationController popToRootViewControllerAnimated:NO];

因为 viewController1 已经在堆栈中。这个方法的作用是移除堆栈上的所有视图控制器,除了第一个视图控制器并移回它。

如果 viewController1 不是你应该使用的 rootView 控制器

[self.navigationController popViewControllerAnimated:NO];

它将仅弹出堆栈上最后一个推送的视图控制器并显示其下方的视图控制器。

于 2012-11-21T07:29:24.373 回答