如何在使用ARC时调试EXC_BAD_ACCESS代码= 2

时间:2013-02-16 23:33:22

标签: ios xcode debugging nszombie

我在这里看到了很多关于如何解决EXC_BAD_ACCESS代码= 2的线程,而且我已经发布了一些共识似乎是我试图访问我的数组或数组中的一个对象。我看到大多数时候解决方案似乎是在代码中有太多[release theObject]。对我来说问题是我没有任何释放呼叫,因为我正在使用ARC。

所以我的问题是如何从这一点开始自己调试。我可以发布代码,如果这会有所帮助,但我认为作为第一步,我只想帮助我的下一步应该是什么以及如何做。

我发现很多线程似乎都说我应该打开NSZombiesEnabled以帮助找到问题的根源。

在僵尸启用之前,我的应用程序将构建并运行,绝对没有错误或警告。但是只要你触摸模拟器中的一个按钮就会崩溃。

打开Zombies后,应用程序仍然构建并运行,没有任何错误,但现在模拟器出现后它立即崩溃,现在XCode现在切换到Tread 1下的Debug Navigator,列出了超过100,000个条目,每个条目你点击的一个显示主窗口中的一些东西,我不知道是什么意思。

所以,现在我该怎么办?我已经打开了Zombies,再次运行,我在屏幕上看到了一堆东西,但是真的不知道如何制作它的正面或反面。我试图发布一个屏幕截图,但我还没有权限这样做。

1 个答案:

答案 0 :(得分:21)

我查看了您的源代码并发现了问题。您正在尝试在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,对象仍然会被释放(当它们的引用计数降至零时)。