UINavigationController popViewControllerAnimated:在iOS 6中崩溃

时间:2012-09-24 18:33:57

标签: iphone objective-c xcode uitableview ios6

以下代码在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),则不会发生崩溃。但当然这会破坏使用自定义流行动画的目的。

3 个答案:

答案 0 :(得分:7)

检查视图控制器代码中是否有如下所示的行:

self.navigationController.delegate=self; 

如果是,那么你必须将其重新设置

self.navigationController.delegate=nil;

之前说

[self.navigationController popViewControllerAnimated:YES]; 

否则,popViewControllerAnimated将首先取消分配代理,然后尝试调用它 - 导致崩溃。

答案 1 :(得分:2)

我知道我的问题很模糊,但我没有太多其他事情要做。我知道行[self.navigationController popViewControllerAnimated:NO];是问题,但我无法弄清楚原因。然后我遇到this question并且第一个答案建议我使我的搜索表成为一个实例变量,而不是每次我想要呈现它时都创建一个新的,并且实际上有效。它一定是一个记忆问题,我无法解决这个问题。

tl; dr

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

答案 2 :(得分:1)

虽然参加派对的时间太晚了......希望这可能会对将来有所帮助。 我开了一个非常古老的代码......

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