推送新视图时 UINavigationItem TitleView 崩溃

Posted

技术标签:

【中文标题】推送新视图时 UINavigationItem TitleView 崩溃【英文标题】:UINavigationItem TitleView crash when a new view is pushed 【发布时间】:2012-08-14 19:42:36 【问题描述】:

在视图控制器加载的视图中,我使用图像自定义标题视图:

self.navigationItem.titleView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"navigationBarCentralImage.png"]];

到目前为止一切顺利,它在导航栏的中心显示图像。 但是,当我弹出当前视图并推送一个在没有自定义标题视图的情况下运行良好的新视图时,它会崩溃。 这是我用来弹出/推送的代码

-(void)popLastViewAndPush:(id)viewController

    NSMutableArray *controllers = [SharedAppDelegate.navigationController.viewControllers mutableCopy];
    if([controllers objectAtIndex:[controllers count] -1] == viewController)
        return;

    [controllers removeLastObject];
    SharedAppDelegate.navigationController.viewControllers = controllers;

    [SharedAppDelegate.navigationController pushViewController:viewController animated:YES];

我有点卡住了,不明白为什么它实际上会因标题视图自定义而崩溃

【问题讨论】:

如果注释掉标题视图自定义,是否会发生崩溃?即:这实际上是导致它的原因吗? 是的,如果我评论 self.navigationItem.titleView 行,不会崩溃!否则这篇文章的实际意义是什么? 【参考方案1】:

如果您不使用 ARC,则将代码行更改为:

self.navigationItem.titleView = [[[UIImageView alloc] initWithImage: [UIImage imageNamed: @"navigationBarCentralImage.png"]] autorelease];

必须将autorelease 添加到分配的对象。

【讨论】:

以上是关于推送新视图时 UINavigationItem TitleView 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationItem 后退按钮返回到上一个导航项,但视图没有改变

从 IBAction 推送视图控制器

自定义导航栏 titleView 在加载新标题之前不会清除以前的标题

UINavigationItem 提示动画问题

使用“模态推送”到 viewController 并且无法在顶部添加 UINavigationItem-(Controller, Bar)

UINavigationController 和 UINavigationItem