我在导航控制器上调用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 错误。这种“修复”会导致你说的内存管理问题吗?
答案 0 :(得分:1)
为什么不尝试查看导航堆栈上的每个View Controller?使用:
[self.navigationController.viewControllers objectAtIndex:index];
在相应的index
查看视图控制器。如果它们看起来都很好,那么它必须是代码中导致崩溃的其他东西。希望有所帮助!