1

私はクライアント用のアプリを構築しており、このエラーが発生し始めるまですべてが順調に進んでいました。これは特殊な状況です。インストゥルメントと NSZombie の使用方法を学びましたが、シミュレーターでのみ iPhone で NSZombieEnabled を使用してインストゥルメントを実行することはできません。UIImagePicker を使用して写真を撮っていて、写真を撮った直後にエラーが発生するため、iPhone でこの問題をデバッグする必要があります。私もARCを使用しているので、リリースを設定したり情報を保持したりすることはまったくできません。ARCはそれを禁止しているため、二重リリースなどではないかと思います。この質問には 2 つの答えがあります。

1: フォトブースを使用して UIImagePicker に画像を渡すことができるかどうか知っている人はいますか? カメラ画面をパスできれば、インストゥルメントと NSZombie を使用できます。

2: iPhone を使用してコードをリファクタリングまたはコメントアウトせずに、エラーの原因となっている行を検出する方法はありますか? iPhone で bad_accesses を追跡する効率的な方法を知っている人はいますか?

私は ARC を使用しており、シミュレーターでこれをデバッグできないことに注意してください。UIImagePicker コントロール スクリプトを取り出してもバグは発生しないので、CameraViewController クラスの何かに絞り込みました。申し訳ありませんが、既存の契約のためにコードを投稿することはできません。ソース コードを表示するには、従業員である必要があります。

限られた情報で申し訳ありませんが、正確なコードの問題に対する直接的な解決策ではなく、デバッグに関する回答を探しています。

バックトレースを投稿するつもりです(私は思う)

(gdb) bt
#0  0x339737e4 in objc_msgSend ()
#1  0x31b30140 in -[UIApplication sendAction:to:from:forEvent:] ()
#2  0x31b300e0 in -[UIApplication sendAction:toTarget:fromSender:forEvent:] ()
#3  0x31b300b2 in -[UIControl sendAction:to:forEvent:] ()
#4  0x31b2fe04 in -[UIControl(Internal) _sendActionsForEvents:withEvent:] ()
#5  0x31b30452 in -[UIControl touchesEnded:withEvent:] ()
#6  0x31b2eddc in -[UIWindow _sendTouchesForEvent:] ()
#7  0x31b2e756 in -[UIWindow sendEvent:] ()
#8  0x31b299fe in -[UIApplication sendEvent:] ()
#9  0x31b29336 in _UIApplicationHandleEvent ()
#10 0x3026c04a in PurpleEventCallback ()
#11 0x3443fce2 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#12 0x3443fca6 in __CFRunLoopDoSource1 ()
#13 0x3443256c in __CFRunLoopRun ()
#14 0x34432276 in CFRunLoopRunSpecific ()
#15 0x3443217e in CFRunLoopRunInMode ()
#16 0x3026b5f2 in GSEventRunModal ()
#17 0x3026b69e in GSEventRun ()
#18 0x31ad0122 in -[UIApplication _run] ()
#19 0x31ace12e in UIApplicationMain ()
#20 0x000034ce in main (argc=1, argv=0x2ffff75c) at /Users/Andrew/Documents/Developing/Xcode Projects/ProjectSVN/Project/trunk/ProjectInterface/ProjectInterface/main.m:16
4

2 に答える 2

2

EXC_BAD_ACCESS必ずしもメモリ管理の問題を意味するわけではありません。メモリの破損やその他の種類のエラーが原因である可能性もあります。

クラッシュのバックトレースを投稿します。

于 2012-07-20T16:45:01.833 に答える
0

コード サンプルがなければなんとも言えませんが、ARC がすべてのベースを完全にカバーしているわけではありません。たとえば、オブジェクト (デリゲートを持つクラス) が存在しないにもかかわらず、コールバック デリゲート メソッドを実行しようとすると、これらの EXC_BAD_ACCESS エラーが発生する可能性があります。

より具体的に言うと、 でクラスを作成したとしviewDidLoad:ましょう - と呼びましょうClassA。私の架空の状況では、View Controller をClassAのデリゲートに設定しました。ただし、 のプロパティを宣言していないためClassA、 のスコープ外での参照はありませんviewDidLoad:

次にClassA、View Controller によって実装されるデリゲート メソッドを宣言するとします。このデリゲートは、このデリゲート メソッドで自身の参照をビュー コントローラーに戻します。この時点で範囲外になる場合と範囲外になる場合があるため、BOOM、不正なアクセス エラーが発生します。オブジェクトがもう存在せず、他のメソッドに渡されている、このようなことを確認してください-これは、ARCが失敗する可能性のある方法の1つです;)

于 2012-07-20T16:46:03.580 に答える