当弹出两个以上的视图控制器时,popToRootViewController崩溃

时间:2011-08-15 18:54:11

标签: iphone uinavigationcontroller

我在导航控制器上调用popToRootViewController有一个奇怪的情况。如果根目录上只有一个或两个视图控制器可以弹出,它可以正常工作。如果堆栈上的根目录顶部有两个以上的视图控制器,则会崩溃。我查看了本网站和其他人的所有popToRootViewController投诉,并尝试将动画设置为NO。这没有用。我也看到一些人在很老的帖子上引用了iOS 3.0的popToRootViewController问题,但是我在iOS 4.0上开发。

更明确一点,如果我的堆栈看起来像这样:RootVC - > VC1 - > VC2。然后我做了

[self.navigationController popToRootViewControllerAnimated:NO];
从VC2

,它按预期弹出到根目录。但是,如果我的堆栈看起来像这样:RootVC - > VC1 - > VC2 - > VC3然后从VC3做同样的事情,它崩溃了。关于可能出现什么问题的任何线索?如果这是一个非常愚蠢的问题,我道歉。我是iPhone开发的新手。

我正在使用以下代码将我的每个视图推送到堆栈中:

-(void)pushViewNamed:(NSString *)viewname 
{
    iOvulate_3AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

    NSString *viewControllerName=viewname;
    UIViewController *targetViewController=[[NSClassFromString(viewControllerName) alloc] initWithNibName:viewControllerName bundle:nil];

    [self.navigationController pushViewController:targetViewController animated:YES];

    if ( [appDelegate.pdbool intValue] == 0 )
    {
        [viewControllerName release];
        [targetViewController release];
    }
}

我把有条件的版本放在那里,因为它解决了我遇到的另一个问题,在堆栈上的第三个视图之外的任何视图上的IBActions都不起作用 - 因为在触摸按钮内部导致消息被发送到一个nil对象应该是视图控制器(或类似的东西?)并导致 EXC_BAD_ACCESS 错误。这种“修复”会导致你说的内存管理问题吗?

1 个答案:

答案 0 :(得分:1)

为什么不尝试查看导航堆栈上的每个View Controller?使用:

[self.navigationController.viewControllers objectAtIndex:index];

在相应的index查看视图控制器。如果它们看起来都很好,那么它必须是代码中导致崩溃的其他东西。希望有所帮助!