我正在使用以下代码行:
[self.navigationController popViewControllerAnimated:YES];
但它在ios 7中表现不像在ios 6中那样。有些时候它不会弹出控制器而我们连续按下按钮2-3次。 导致导航栏中出现突然行为并取消分配控制器但在ui上显示相同的内容。 因此,当我们按下该控制器上的任何内容时,由于控制器已经被释放,因此导致崩溃。
检查您是否在UI线程上运行代码
[self.navigationController popToRootViewControllerAnimated:YES];
此方法将导航到navigationController的根目录。
您可以使用以下代码检查视图控制器层次结构。
NSLog(@"%@",self.navigationController.viewControllers);
我用这种方式解决了这个问题:
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弹出,然后视图将从导航堆栈弹出,我认为是动画序列的问题。
尝试使用此代码从导航堆栈弹出视图控制器
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count -2] animated:YES];
我在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];
}
我基本上阻止了流行动画期间的所有用户交互。我知道这是一个肮脏的解决方案,但它是我发现解决问题的唯一方法。
我认为这应该没有dispatch_async。我遇到了同样的问题,但我知道原因。
如果当前场景被分配到故事板中的正确视图控制器名称,我们应该检查它。(身份检查员 - >类)
如果将按钮操作连接到m文件,然后插入视图控制器的名称,则表示该操作无效。
因此,您应该删除connect,并插入正确的视图控制器名称,然后您应该再次将操作连接到m文件。
我使用拆分视图控制器从master-detail模板创建了我的项目。就我而言,删除拆分视图控制器解决了这个问题。