我在这里看到了很多有关如何解决EXC_BAD_ACCESS code = 2的问题,大家的共识似乎是我正在尝试访问我的数组或已经释放它的数组中的对象。我看到大多数时候,解决方案似乎是在他们的代码中有太多[release theObject]。对我来说,问题是我没有任何发布请求,因为我正在使用ARC。
所以我的问题是,从现在开始,我该如何自己进行调试。我可以发布代码(如果有帮助的话),但是我认为,第一步,我只是想帮助我下一步应该做什么以及如何做。
我发现很多线程似乎在说我应该打开NSZombiesEnabled来帮助找到问题的根源。
在启用Zombies之前,我的应用程序将在完全没有错误或警告的情况下构建和运行。但是,只要您触摸模拟器中的按钮,它就会崩溃。
开启Zombies后,该应用程序仍可正常构建和运行,但现在它会在模拟器出现后立即崩溃,现在XCode现在切换到Tread 1下的Debug Navigator,列出了100,000多个条目,每单击一次在主窗口中显示一些内容,我不知道这是什么意思。
那么,现在我该怎么办?我打开了僵尸,然后再次运行,我在屏幕上看到了很多东西,但并不真正知道如何制作它的正面或反面。我试图发布一个屏幕截图,但是我还没有这样做的权限。
最佳答案
我查看了您的源代码,发现了问题。您在懒惰地加载numberOfMatchingCards
的过程中,试图在self.game
上设置game
属性,从而创建一个无限循环。您的self.game.numberOfMatchingCards
将尝试加载新游戏,因为在调用setter时尚未完成实例化游戏。只是改变
- (IBAction)cardModeChanged:(UISegmentedControl *)sender {
switch ([sender selectedSegmentIndex]) {
case 0:
self.game.numberOfMatchingCards = 2;
break;
case 1:
self.game.numberOfMatchingCards = 3;
break;
default:
self.game.numberOfMatchingCards = 2;
break;
}
}
至
- (IBAction)cardModeChanged:(UISegmentedControl *)sender {
switch ([sender selectedSegmentIndex]) {
case 0:
_game.numberOfMatchingCards = 2;
break;
case 1:
_game.numberOfMatchingCards = 3;
break;
default:
_game.numberOfMatchingCards = 2;
break;
}
}
我不确定这是否可以解决您的错误访问问题,但这是调试导航器中许多条目的原因。修复此问题后,让我知道您是否仍然存在访问错误的问题。重要的是要记住,即使您使用的是ARC,对象仍然会被释放(当它们的引用计数降至零时)。
关于ios - 使用ARC时如何调试EXC_BAD_ACCESS code = 2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14916332/