9

シミュレーターでのアプリの実行に問題があります。問題:

スレッド 1 の objc_msgSend で発生する EXC_BAD_ACCESS。

スクリーンショット:

ここに画像の説明を入力

私のアプリケーションには、複数ありViewControllerます。戻るボタンをクリックするとUINavigationBar、このタイプの問題が生成されます。すべての機能が正常に動作するため、問題を説明できません。

例 :-

1 - fitstVController(正常に動作)

=> UITableView があり、特定の行をクリックすると、別の UIViewController (SecoundViewController) に移動します

2 - SecoundViewController(正常に動作)

=> UITableView と UIActionSheet があります。UiActionSheet のボタンを選択すると、別の UIViewController (ThirdViewController) が開いています

3 - ThirdViewController(正常に動作)

=> UITableView と複数の UIPickerView があります。しかし、以前のUIViewController(SecoundViewController)に戻れないという問題があります。=> それを行うと、 EXC_BAD_ACCESS (コード = 1、アドレス = 0x30000008) の問題が生成されます。

4

3 に答える 3

20

つまり、既に解放されているオブジェクトに割り当てられたメモリを解放すると、この種の問題が発生します。UIViewControllerほとんどの場合、このタイプの問題は、以前の (または他のケース)に戻ったときに生成されます。

また、より完全な説明については、次のリンクを読むことをお勧めします。

Hamster Emporium アーカイブ: objc_msgSend() でクラッシュした

于 2012-09-17T15:01:21.297 に答える
5

例外ブレークポイントを設定すると、Xcode は例外が発生するとすぐに実行を停止します。完全に確実というわけではありませんが、これにより通常、問題の原因となったコード行でアプリが壊れます。

これにより、問題の原因を突き止めるのが非常に簡単になります。スタック トレースは問題を診断するための決定的な方法ですが、多くの場合、あまりにも詳細すぎてあまり役に立ちません (特に、私のようにコンパイラの専門家でない場合は. )

これを設定するにBreakpointsは、ナビゲーター パネルのシンボルをクリック+し、下部にある ボタンをクリックします。次に、選択リストからAdd Exception Breakpointとを選択します。Objective-C

于 2012-09-16T09:15:58.013 に答える
2

@TimDが正しく指摘しているように、例外ブレークポイントを設定すると、問題のあるコード行が強調表示されます(アセンブラを解読しようとしたり、手動で問題の場所を特定しようとしたりするのではなく)。そして、いつものように、この種のメモリの問題を診断するときは、常にゾンビを有効にする必要があります。最後に、ARC 以外のコードでは特に重要なことですが、コードを静的アナライザーで実行する必要があります。静的アナライザーで多くのメモリ関連の問題を特定できるからです。静的アナライザーは常に重大なプログラミング エラーを指摘するため、静的アナライザーからの警告がゼロであることを常に確認する必要があります。

于 2012-09-15T18:38:29.383 に答える