切换视图控制器时的 EXEC_BAD_ACCESS (code=1 address=0x90000008)

Posted

技术标签:

【中文标题】切换视图控制器时的 EXEC_BAD_ACCESS (code=1 address=0x90000008)【英文标题】:EXEC_BAD_ACCESS (code=1 address=0x90000008) when switching view controllers 【发布时间】:2012-06-07 01:31:47 【问题描述】:

所以,我有一个使用 tableViewController 来填充不同游戏类型列表的应用程序。当一个游戏被选中时,它会使用该名称执行一个 segue。

在我为其中一种游戏模式完成添加统计菜单之前,这一切正常(正确推送和弹出)。

现在,当我从 stats 菜单切换回 tableViewController 时,有时会出现 EXEC_BAD_ACCESS 错误。所以:

TVC ---> 游戏 ---> 统计数据

然后

统计 ---> TVC

从 TVC 切换到游戏的代码:

NSString* a = (NSString*)[games objectAtIndex:indexPath.row];
a = [a stringByReplacingOccurrencesOfString:@" " withString:@""];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[self performSegueWithIdentifier:a sender:self];

从游戏切换到统计菜单的代码:

[self performSegueWithIdentifier:@"Stats" sender:self];

从统计菜单切换到 TVC 的代码(出现问题的地方):

NSArray* controllers = self.navigationController.viewControllers;
int a = [controllers count] - 1;
[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:a-2] animated:YES];

Error in question

Link to Code

【问题讨论】:

exec_bad_access 几乎没有告诉我们任何信息,只是试图访问一个无效对象。你在用ARC吗?是否也启用了异常断点? ARC 关闭了,还有什么异常断点? 其实是EXC_BAD_ACCESS(马赫例外) 看这个问题的第一个答案:***.com/questions/10212677/… 如果您不使用 ARC,请确保您已启用 NSZombies。在 Xcode 4 中:编辑方案 -> 诊断 -> 启用僵尸对象 【参考方案1】:

尝试分析您的代码以查看是否存在任何内存泄漏。这可能是您的应用程序崩溃的原因。

【讨论】:

切换到 ARC 以避免分配/释放问题【参考方案2】:

看起来苹果现在正试图强制执行 ARC。我刚刚下载了 10.7 SDK 的更新,它使我的程序(其中还包含 performSegueWithIdentifier:) 超级错误,并在我之前解决的多个问题上抛出 EXC_BAD_ACCESS(SDK 更新前)。我打开了 ARC,并注释掉了我所有的 release/dealloc 调用,它恢复了工作状态。很好,我想调试器如何将您指向它们所在的位置。 :)

【讨论】:

以上是关于切换视图控制器时的 EXEC_BAD_ACCESS (code=1 address=0x90000008)的主要内容,如果未能解决你的问题,请参考以下文章

重新加载包含 UITableView 的 UIViewController 时的 EXEC_BAD_ACCESS

切换视图时的 iOS 特定行为

从 Tab View Controller 切换到滑动手势时的 iOS Xcode 问题

使用标签栏控制器时的方向问题

使用 llvm 2.0 编译器构建的 EXEC_BAD_ACCESS 导致临时测试崩溃

来自另一个视图控制器时的 xcode 问题