2017-02-14 7 views
1

EDIT:iPad RetinaシミュレータとiPad Mini 3テストデバイスでのみが発生することを確認しました。これらのターゲットでは100%の時間が発生し、他のiPadやiPhoneシミュレータ(iPad Air/Air 2、iPad Pro、iPhone 5〜7 Plus)では決して発生しません。私はテストのための他のデバイスを持っていません。長押しの場合はEXC_BAD_ACCESS。ゾンビ活動なし


私は、各セル内のカスタムビューにUILongPressGestureRecognizerを追加したUITableViewを表示スウィフトで書かれたアプリケーションを持っています。 EXC_BAD_ACCESS(コード= 1、アドレス= 0xd08600b6)

(アドレスは乱暴に変化:アプリアプリ

スレッド1で停止し、その時点で行のI長押しするまで正常に動作しますクラッシュが発生すると、デバッグコンソールに出力が表示されません。 XCode自体が、私のアプリケーションデリゲートのクラス宣言の最初の行に開きます。

私は長押しイベントハンドラメソッドの最初の行にブレークポイントを設定しますが、ブレークポイントがヒットする前にアプリケーションがクラッシュします。私も例外ブレークポイントを追加しましたが、問題を捕らえることはありません。

私はスキームでゾンビオブジェクトを有効にしましたが、何も表示されません。私は、Instrumentsとゾンビテンプレートを使用してアプリを実行しようとしました。アプリは単に停止し、楽器はゾンビ活動のフラグを立てません。 XCodeのAnalyzeは何の問題も報告しません。

どのように関連性があるのか​​わかりませんが、最初にテスターに​​配布する準備としてアプリをアーカイブして以来、この問題は新しいものです。それ以前は、このアプリはシミュレータやテストデバイスで完璧に動作していました。この問題は、最初にデバイス上に配布用.ipaファイルをインストールして実行したときに表示されました。私はシミュレータに戻り、同じ動作を見つけました。私はプロジェクトをきれいにして、ビルドフォルダをきれいにし、私の開発マシンを再起動し、私が考えることができるすべてのことを素朴な状態で実行しました。変わりはない。

私はこれを追跡するために進歩を遂げる方法を失っています。どんな提案も大歓迎です。

さらに情報

クラッシュがUILongPressGestureRecognizerイニシャライザに渡された#selectorオブジェクトの内側に起こっていることが表示されます。

#@objc TikkunRowViewでobjc_retain 0 0x006e7295()
#1 0x0007529f:ここではデバッグナビゲータ・ペインからコールスタックです。onLongPress(送信者:UILongPressGestureRecognizer、forEvent:たUIEvent) - >()()
#2 0x01cc6d3b - [UIGestureRecognizerTarget _sendActionWithGestureRecognizer:()
#_UIGestureRecognizerSendTargetActions()
#3 0x01ccf75e _UIGestureRecognizerSendActions 4 0x01cccdee()
#5で0x01ccbca8 - [UIGestureRecognizer _updateGestureWithEvent:buttonEvent:()
_UIGestureEnvironmentUpdate位6 0x01cb6670()

そしてここでクラッシュ(AT calllがオフセット起こる上記#1のコードです42 >):

Tikkun Sample`@objc TikkunRowView.onLongPress(sender : UILongPressGestureRecognizer, forEvent : UIEvent) ->(): 
    0x60270 <+0>: pushl %ebp 
    0x60271 <+1>: movl %esp, %ebp 
    0x60273 <+3>: pushl %esi 
    0x60274 <+4>: subl $0x24, %esp 
    0x60277 <+7>: movl 0x14(%ebp), %eax 
    0x6027a <+10>: movl 0x10(%ebp), %ecx 
    0x6027d <+13>: movl 0x8(%ebp), %edx 
    0x60280 <+16>: movl %ecx, (%esp) 
    0x60283 <+19>: movl %ecx, -0x8(%ebp) 
    0x60286 <+22>: movl %edx, -0xc(%ebp) 
    0x60289 <+25>: movl %eax, -0x10(%ebp) 
    0x6028c <+28>: calll 0x7c9ec     ; symbol stub for: objc_retain 
    0x60291 <+33>: movl -0x10(%ebp), %ecx 
    0x60294 <+36>: movl %ecx, (%esp) 
    0x60297 <+39>: movl %eax, -0x14(%ebp) 
    0x6029a <+42>: calll 0x7c9ec     ; symbol stub for: objc_retain 
>> 0x6029f <+47>: movl -0xc(%ebp), %ecx << CRASH HAPPENS WITH THIS LINE HIGHLIGHTED 
    0x602a2 <+50>: movl %ecx, (%esp) 
    0x602a5 <+53>: movl %eax, -0x18(%ebp) 
    0x602a8 <+56>: calll 0x7c9ec     ; symbol stub for: objc_retain 
    0x602ad <+61>: movl -0x8(%ebp), %ecx 
    0x602b0 <+64>: movl %ecx, (%esp) 
    0x602b3 <+67>: movl -0x10(%ebp), %edx 
    0x602b6 <+70>: movl %edx, 0x4(%esp) 
    0x602ba <+74>: movl -0xc(%ebp), %esi 
    0x602bd <+77>: movl %esi, 0x8(%esp) 
    0x602c1 <+81>: movl %eax, -0x1c(%ebp) 
    0x602c4 <+84>: calll 0x5fd40     ; Tikkun_Sample.TikkunRowView.onLongPress (sender : __ObjC.UILongPressGestureRecognizer, forEvent : __ObjC.UIEvent) ->() at TikkunRowView.swift:128 
    0x602c9 <+89>: movl -0xc(%ebp), %eax 
    0x602cc <+92>: movl %eax, (%esp) 
    0x602cf <+95>: calll 0x7c9e6     ; symbol stub for: objc_release 
    0x602d4 <+100>: addl $0x24, %esp 
    0x602d7 <+103>: popl %esi 
    0x602d8 <+104>: popl %ebp 
    0x602d9 <+105>: retl 

私はこのようなものを読んで何の専門家だが、クラッシュは私のイベントハンドラメソッドに派遣することになっているコンパイラによって生成されたコードで起こっているように見えます。私はコードが(オフセットで< +84 >)で呼び出す前に、このコードがどのオブジェクトをチェックしているかわからない。

let g = UILongPressGestureRecognizer(target: self, action: #selector(TikkunRowView.onLongPress(sender:forEvent:))) 
+0

'ステップ1:クラッシュの原因となった行を特定する:'シミュレータでクラッシュすると、エラーが発生した行で実行を停止する必要があります。そうでない場合は、例外ブレークポイントを追加します。どの行の実行が停止するかを示す適切なコードを追加してください。 'ステップ2:人々がクラッシュログを見直しましょう:'関連する記号クラッシュログを追加してください。 –

+0

端末を確認してください。何かがそこに出力されますか?通常、エラーメッセージが表示されます。また、迅速なオプションの暗黙のアンラップは、そのような問題の大部分の原因です。 –

+0

@RoboticCat - XCodeは、実行可能コードではなく、自分のアプリケーションデリゲートのクラス宣言で停止します。コンソールにはクラッシュログはありません。 –

答えて

1

コンソールがあなたに詳細なエラーメッセージを表示しなかった理由はわかりません。私はジェスチャ認識エンジンを構築するために私が使用するコードです。しかし、あなたのコードを見ると、明らかにジェスチャーアクションコールバックの誤った署名が原因です。以下はAPIドキュメントから引用されています。

次のシグネチャのいずれかに適合しなければならない呼び出されるアクションメソッド


- (ボイド)handleGesture。
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;

関連する問題