嵌套UINavigationController的应用程序在iOS SDK 4.2中崩溃

我正在将App迁移到当前的iOS SDK。 它的根控制器是UINavigationController ,另一个UINavigationController作为第一个视图控制器。

应用程序现在因某种无限递归而导致EXC_BAD_ACCESS崩溃,但我无法理解strack跟踪。 据我所知,没有任何改变,期望一些项目设置使其在当前的SDK上进行编译。

我创建了一个新的基于导航的应用程序,并添加了一个嵌套的UINavigationController ,它也崩溃了应用程序。 嵌套UINavigationController通常是个坏主意吗?

非常感谢任何可能导致此问题或如何解释堆栈跟踪和调试问题的提示。

在加载视图之前将父导航控制器的导航栏设置为隐藏(在界面构建器或代码中)时,它将起作用:

 navigationController.navigationBar.hidden = YES; [self.window addSubview:navigationController.view]; 

好吧,拥有一个嵌套的UINavigationController似乎很奇怪,但是我知道了什么。 嵌套导航控制器的根视图控制器是什么? 希望不是顶级导航控制器。

这里是:

  1. 创建一个新的UINavigationController
  2. viewDidLoadviewWillLoad ,将控制器分配并初始化为您想要的任何根
  3. 调整NavigationController的视图大小并将其作为子视图添加到父viewCOntroller的视图中(我有self.contentView)

繁荣!!

这是代码..

 - (void)viewDidLoad { [super viewDidLoad]; [self.contentView setFrame:CGRectMake(0, 0, self.contentView.bounds.size.width, self.contentView.bounds.size.height)]; mNavController =[[UINavigationController alloc]initWithRootViewController:myNestedRootController]; / [self.mNavController.view setFrame:CGRectMake(0, 0, self.contentView.bounds.size.width, self.contentView.bounds.size.height)]; [self.mNavController setNavigationBarHidden:YES]; //optional [self.contentView addSubview:self.mNavController.view]; } 

实际上你可以跳过contentView并直接在viewcontroller's view上看到mNavController's viewcontroller's view (我的坏)

我有一种推送(仅推送)新VC的方法

 -(void)moveToContentViewController:(PM_BaseContentVC *)contentvc animated:(BOOL)animated{ [self.mNavController popToRootViewControllerAnimated:NO]; //silently pop the previous viewcontroller [self.mNavController pushViewController:contentvc animated:YES]; //push new viewcontrolelr [self.contentView addSubview:self.mNavController.view]; //add the view } 

欢迎sugestions和优化:)