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

时间:2011-01-30 21:47:09

标签: iphone ios uinavigationcontroller

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

应用程序现在因某种无限递归而导致EXC_BAD_ACCESS崩溃,但我无法弄清楚这一点。据我所知,没有任何改变,期望一些项目设置使其在当前SDK上编译。

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

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这是:

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

    这是代码..

    - (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并直接在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
    }
    

    欢迎提及和优化:)