7

EXC_BAD_ACCESS コード = 2 を解決する方法については、ここに多くのスレッドが表示されます。コンセンサスは、配列または配列内のオブジェクトに既にアクセスしようとしているようです。ほとんどの場合、コードに [release theObject] が多すぎることが解決策のようです。私にとっての問題は、ARC を使用しているため、リリース コールがないことです。

したがって、私の質問は、この時点から自分でこれをデバッグするにはどうすればよいかです。それが役立つ場合はコードを投稿できますが、最初のステップとして、次のステップがどうあるべきか、そしてその方法について助けてほしいと思います.

多くのスレッドが、問題の原因を見つけるために NSZombiesEnabled をオンにする必要があると言っているように見えることがわかりました。

Zombies が有効になる前は、私のアプリはエラーや警告なしでビルドおよび実行されていました。しかし、シミュレーターのボタンに触れるとすぐにクラッシュします。

ゾンビをオンにした後も、アプリはエラーなしでビルドおよび実行されますが、シミュレーターが表示されるとすぐにクラッシュし、XCode がトレッド 1 の下のデバッグ ナビゲーターに切り替わり、100,000 を超えるエントリがリストされ、クリックするたびにon を実行すると、メイン ウィンドウに何かが表示されますが、これが何を意味するのかわかりません。

それで、今私は何をしますか?ゾンビをオンにしてもう一度実行すると、画面にたくさんのものが表示されますが、表と裏を作成する方法が本当にわかりません。スクリーンショットを投稿しようとしましたが、まだ投稿する権限がありません。

4

1 に答える 1

22

ソースコードを調べたところ、問題が見つかりました。遅延読み込みの途中でnumberOfMatchingCardsプロパティを onに設定しようとしており、無限ループが発生しています。セッターが呼び出されるまでにゲームのインスタンス化が完了していないため、新しいゲームをロードしようとしています。変えるだけ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 に答える