14

我正在使用以下代码行:

[self.navigationController popViewControllerAnimated:YES];

但它在 ios 7 中的行为不像在 ios 6 中那样。有时它不会在我们连续按下后退按钮 2-3 次时弹出控制器。
导致导航栏中的突然行为并释放控制器但在 ui 上显示相同。
因此,当我们在该控制器上按下任何东西时,都会导致崩溃,因为控制器已经被释放。

4

7 回答 7

9

检查您是否在 UI 线程上运行代码

于 2014-12-10T05:17:47.320 回答
7
[self.navigationController popToRootViewControllerAnimated:YES];

此方法将导航到您的 navigationController 的根目录。

您可以使用以下代码检查您的 viewController 层次结构。

    NSLog(@"%@",self.navigationController.viewControllers);
于 2014-03-20T12:19:20.943 回答
5

我用这种方式解决了这个问题:

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                                                                     UINavigationController * nav = tabbarControl.selectedViewController;
                                                                     [nav.viewControllers objectAtIndex:0];
[nav setViewControllers:@[[nav.viewControllers objectAtIndex:0]] animated:NO];
                                                                tabbarControl.selectedIndex = 0;
 });

当您延迟一秒钟时,视图将从 UI 中弹出,然后视图将从导航堆栈中弹出,我认为是动画序列的问题。

于 2015-12-12T14:27:18.897 回答
0

我在 iOS 8 上遇到了同样的问题。

我通过继承 UINavigationController 并添加以下代码来解决:

- (void)viewDidLoad 
{
    [super viewDidLoad];
    self.delegate = self;
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];
    return [super popViewControllerAnimated:animated];
}

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
{
    [[UIApplication sharedApplication] endIgnoringInteractionEvents];
}

我基本上阻止了弹出动画期间的所有用户交互。我知道这是一个肮脏的解决方案,但它是我发现的唯一解决问题的方法。

于 2015-02-22T15:04:05.567 回答
0

尝试使用此代码从导航堆栈中弹出视图控制器

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count -2] animated:YES];
于 2014-03-20T12:17:00.877 回答
0

我认为这应该在没有 dispatch_async 的情况下工作。我遇到了同样的问题,但我知道原因。

如果当前场景被分配给故事板中正确的视图控制器名称,我们应该检查它。(身份检查器 -> 类)

如果将按钮操作连接到 m 文件,然后插入视图控制器的名称,那将不起作用。

因此,您应该删除连接,并插入正确的视图控制器名称,然后您应该再次将操作连接到 m 文件。

于 2018-10-08T13:06:12.037 回答
0

我从使用拆分视图控制器的主从模板创建了我的项目。就我而言,删除拆分视图控制器解决了这个问题。

于 2019-04-27T08:56:31.520 回答