4

下面的代码在 iOS 4 和 5 中运行良好,但在带有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) ,则不会发生崩溃。但这当然违背了使用自定义弹出动画的目的。

4

3 回答 3

7

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

self.navigationController.delegate=self; 

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

self.navigationController.delegate=nil;

在你说之前

[self.navigationController popViewControllerAnimated:YES]; 

否则,popViewControllerAnimated将首先解除分配委托,然后尝试调用它 - 导致崩溃。

于 2013-08-06T21:44:59.627 回答
3

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

tl;博士

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

于 2012-09-25T13:16:02.263 回答
1

虽然聚会迟到了……希望这对将来的人有所帮助。我打开了一个非常古老的代码......

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

于 2018-05-11T20:06:31.710 回答