【问题标题】:UINavigationController popViewControllerAnimated: crash in iOS 6UINavigationController popViewControllerAnimated:在 iOS 6 中崩溃
【发布时间】:2012-09-24 18:33:57
【问题描述】:

下面的代码在 iOS 4 和 5 中运行良好,但在 iOS 6 中使用 EXC_BAD_ACCESS 崩溃。我将不胜感激任何帮助解决它。这段代码在处理我的应用搜索逻辑的UITableViewController 中被调用:

CATransition *transition = [CATransition animation];
transition.duration = 0.3f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transition.type = kCATransitionFade;

[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController popViewControllerAnimated:NO];

我添加tableView的方式类似,调用时不会崩溃:

SearchTVC *searchTable = [[SearchTVC alloc] init];
searchTable.detailViewController = self.detailViewController;

CATransition *transition = [CATransition animation];
transition.duration = 0.3f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transition.type = kCATransitionFade;

[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController pushViewController:searchTable animated:NO];

可能是什么问题?

*编辑

有趣的是,如果我使用 [self.navigationController popViewControllerAnimated:YES];YES 而不是 NO),则不会发生崩溃。但这当然违背了使用自定义弹出动画的目的。

【问题讨论】:

标签: iphone objective-c xcode uitableview ios6


【解决方案1】:

检查您的视图控制器代码中是否有类似以下的行:

self.navigationController.delegate=self; 

如果是这样,那么您必须将其重新设置

self.navigationController.delegate=nil;

在你说之前

[self.navigationController popViewControllerAnimated:YES]; 

否则,popViewControllerAnimated 将首先释放委托,然后尝试调用它 - 导致崩溃。

【讨论】:

  • 重置导航控制器的代理似乎需要在viewWillDisappear: 中进行。在viewDidDisappear: 中执行此操作似乎有时有效,但并非始终有效,并且viewWillDisappear: 仍然允许代理控制任何自定义转换。
  • 非常感谢。我要花很长时间才能找到这个。这是一个非常令人讨厌的基于定时炸弹的 iOS 内部堆栈深处的崩溃。
【解决方案2】:

我知道我的问题含糊不清,但我没有什么要说的了。我知道[self.navigationController popViewControllerAnimated:NO]; 是问题所在,但我不知道为什么。然后我遇到了this question,第一个答案建议我让我的搜索表成为一个实例变量,而不是每次我想展示它时都创建一个新的,这确实有效。这一定是我无法解决的记忆问题。

tl;dr

确保被推送和弹出的UIViewController 是一个实例变量。

【讨论】:

  • 喜欢 TLDR 版本。这对我来说最有意义,更重要的是......有效。
【解决方案3】:

虽然聚会迟到了...希望这可能对将来的某人有所帮助。 我打开了一个很老的代码...

Enabling ARC mode 然后解决所有编译器警告/错误自动修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    相关资源
    最近更新 更多