23

Thread 1: EXC_BAD_ACCESS (code=1, address=0xf00000c) に問題があり、解決方法がわかりません。コア日付でいくつかのオブジェクトを変更して保存し、このコントローラーを親にポップしようとすると表示されました。このエラーは、main() と retVal にあります。ここにいくつかのコードがあります

        int retVal;
    @try {
        retVal =  UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
           */\ error is here**
    }
    @catch (NSException *exception) {
        NSLog(@"%@", [exception callStackSymbols]);
        @throw exception;
    }
    return retVal;

アプリを再実行した後、私の変更はすべてコアデータにあります。さらに、この問題は iOS 7 のみで発生します。iOS 6.1 は問題ありません。

誰かがそれを解決する方法を知っていますか?

4

9 に答える 9

10

ソース コードをデバッグし、ロジックを再分析することによってのみ、この問題を解決しました。

以下は、私に大いに役立つ参考文献です。

EXC_BAD_ACCESS は、メッセージを実行するクラスのインスタンスがないメモリ内のポイントにメッセージが送信されたことを意味します。したがって、「悪いアクセス」。

3 つのケースで EXC_BAD_ACCESS を取得します。

  • オブジェクトが初期化されていません
  • オブジェクトはすでに解放されています
  • あまり起こりそうにないその他のこと

それはすでに良い出発点です。デバッガーの使用を開始します。作業中のクラスに最近新しいオブジェクトを追加した場合は、新しく追加されたオブジェクトが初めて使用される前の行にブレークポイントを置き、デバッガーで値を確認します。

ただし、最も頻繁に発生するのは、オーバーリリースされたオブジェクト (つまり、コール スタックから削除されたオブジェクト) にメッセージを送信することです。この場合、コンソールに表示されるすべて (実際にはすべて) は :EXC_BAD_ACCESS になります。

これは、オブジェクトがなくなったためであり、それがどのクラスだったのか、どのソース ファイルなのかなどの情報がありません。

これにゾンビを使用しないようにしてください。

于 2015-06-12T07:07:22.173 に答える
1

NSString 変数の 1 つの名前が、フレームワークのクラス変数の 1 つと同じ名前であることを確認することで、同じ問題を解決しました。名前を少し変更するのに数秒かかり、問題はなくなりました。

フレームワークには非常に多くのクラス変数があるため、すべてのプログラマーが偶然にも、フレームワーク クラスのどこかで使用されているものとまったく同じクラスの変数に名前を付ける可能性が非常に高くなります。したがって、ほとんどの場合、Xcode のバグである必要はありません。

于 2014-09-17T23:28:57.120 に答える