4

可能な限りあらゆる検索を試みましたが、1週間で同様のものは見つかりませんでした. テーブル ビューを表示するアプリケーションを作成しています。セル (カスタム クラスおよび Interface Builder で作成) は、セルのクラスで pu である UIPanGestureRecognizer を使用してドラッグできます。セルを指で押し続けると、アプリがエラーでクラッシュすることを除いて、すべて正常に動作します。

-[UILongPressGestureRecognizer translationInView:]: unrecognized selector sent to instance 0x94670a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILongPressGestureRecognizer translationInView:]: unrecognized selector sent to instance 0x94670a0'

私はそれが何を意味するかを知っています (通常、インスタンスに送信された間違ったパラメーター) が、コードに UILongPressGestureRecognizer の痕跡がないため、これがどのように可能であるかは本当にわかりません。LongPressGestureREcognizer EVERYWHERE (セル クラス内、テーブルビューのクラス内、すべてのセルの割り当て前) を傍受しようとしましたが、エラーは同じです (ここで件名の多くのスレッドを見て、私を信頼してください。構文は正しかった.

他のドキュメントが必要な場合は、お気軽にお問い合わせください (これが初めての投稿で、何を表示する必要があるのか​​正確にはわかりません)。

貴重なご協力ありがとうございます。

OK、問題はまだあります。お手数をおかけして申し訳ありません :( どうにかしてブレークポイントを設定し、スタック トレースを出力することができました。これは次のとおりです。

0   uBellow                             0x0000ac57 -[OpinionCell gestureRecognizerShouldBegin:] + 71
1   UIKit                               0x00914939 -[UIGestureRecognizer _shouldBegin] + 1334
2   UIKit                               0x0091181a -[UIGestureRecognizer setState:] + 152
3   UIKit                               0x00921cea -[UILongPressGestureRecognizer enoughTimeElapsed:] + 127
4   libobjc.A.dylib                     0x017186b0 -[NSObject performSelector:withObject:] + 70
5   UIKit                               0x00787954 -[UIDelayedAction timerFired:] + 83
6   Foundation                          0x0114d2c0 __NSFireTimer + 97
7   CoreFoundation                      0x01bce376 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22
8   CoreFoundation                      0x01bcde06 __CFRunLoopDoTimer + 534
9   CoreFoundation                      0x01bb5a82 __CFRunLoopRun + 1810
10  CoreFoundation                      0x01bb4f44 CFRunLoopRunSpecific + 276
11  CoreFoundation                      0x01bb4e1b CFRunLoopRunInMode + 123
12  GraphicsServices                    0x022337e3 GSEventRunModal + 88
13  GraphicsServices                    0x02233668 GSEventRun + 104
14  UIKit                               0x00648ffc UIApplicationMain + 1211
15  uBellow                             0x0000287d main + 141
16  uBellow                             0x000027a5 start + 53

アプリはコードでブロックします。

-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
CGPoint translation = [gestureRecognizer translationInView:[self superview]];

編集 UILongPressGestureRecognizer をインターセプトすることで解決しましたが、安全な方法ですか?

-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
if([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]){
    return NO;
}else{
CGPoint translation = [gestureRecognizer translationInView:[self superview]];
// Check for horizontal gesture
if (fabsf(translation.x) > fabsf(translation.y)){
    return YES;
}
}
return NO;}
4

2 に答える 2

4

あなたの中で:

-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer

変更してみてください:

 CGPoint translation = [gestureRecognizer translationInView:[self superview]];

に:

 CGPoint translation = [gestureRecognizer locationInView:[self superview]];

お役に立てれば。

于 2013-05-02T05:12:37.580 に答える