2

如果有人有经验,我可以使用一些帮助来调试这个问题。我有一个 UITabBarController 作为我的根视图控制器。每个选项卡的第一个视图控制器是 UINavigationController。

选项卡 1:带有地图的视图是第一个 viewController。当您按下标注时,将运行以下代码:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
    [self performSegueWithIdentifier:@"ShowLocationDetails" sender:self];
}

在情节提要中,我将其连接为Push.

在第一个 viewController 上,因为我有一张地图并且不想显示导航栏,所以我这样做:

FirstViewController <UINavigationControllerDelegate>

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:YES animated:NO];
}

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:YES animated:NO];
}

在我推入堆栈的第二个视图控制器上,我确实想要导航栏,所以我有以下代码:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if ([viewController isKindOfClass:[FirstViewController class]]) {
        [self.navigationController setNavigationBarHidden:YES animated:YES];
    }
    else {
        [self.navigationController setNavigationBarHidden:NO animated:YES];
    }
}

选项卡 2:现在只是一个选项卡视图。

如果我执行这些简单的步骤,我可以让我的应用程序崩溃:

按标注以推送 LocationDetails。按返回返回到第一个视图控制器 按选项卡二转到 TableViewController 按选项卡一返回到地图,这会导致 EXC_BAD_ACCESS 崩溃。我尝试运行 Instruments,但我不知道它是什么意思:

在此处输入图像描述

如果我启动应用程序,并且整天在选项卡之间切换而不将新控制器推入选项卡 1 上的堆栈,它不会崩溃。

如果我删除 navigationController willShowViewController 委托方法,它也不会崩溃。但当然,我有导航栏,这不是我想要的。

有什么想法吗?谢谢!

编辑 所以我尝试了Nuzhat所说的,我遇到了同样的问题。我都试过了

self.navigationController.navigationBar.hidden = YES;

self.navigationController.navigationBardHidden = YES;

这不是我正在寻找的解决方案。当我推送到下一个视图控制器时,navigationBar 不存在。所以在那个 viewController 的 viewDidLoad 中,我设置

self.navigationController.navigationBar.hidden = NO;

然后我弹回到 FirstViewController,然后我切换选项卡,仍然崩溃。隐藏导航栏似乎有问题,然后再次显示。

4

0 回答 0