7

我在这里看到很多关于如何解决 EXC_BAD_ACCESS 代码 = 2 的线程,并且共识似乎是我正在尝试访问我的数组,或者在我已经发布它之后访问我的数组中的一个对象。我看到大多数时候解决方案似乎是他们的代码中有太多 [release theObject]。我的问题是我没有任何发布电话,因为我使用的是 ARC。

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

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

在启用 Zombies 之前,我的应用程序将完全没有错误或警告地构建和运行。但是,一旦您在模拟器中触摸一个按钮,它就会崩溃。

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

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

4

1 回答 1

22

我查看了您的源代码并发现了问题。您试图在延迟加载过程中将numberOfMatchingCards属性设置为 on ,从而创建了一个无限循环。您将尝试加载新游戏,因为在调用 setter 时您还没有完成游戏的实例化。只是改变self.gamegameself.game.numberOfMatchingCards

- (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,对象仍然会被释放(当它们的引用计数降至零时)。

于 2013-02-17T21:39:10.623 回答