uilongpressgesturerecognizer stürzt ab, auch wenn es nicht implementiert ist
Ich habe jede mögliche Suche versucht, aber in einer Woche nichts Vergleichbares gefunden. Ich erstelle eine Anwendung, die eine Tabellenansicht anzeigt. Zellen (von einer benutzerdefinierten Klasse und mit Interface Builder erstellt) können mit einem UIPanGestureRecognizer gezogen werden, der sich in der Klasse der Zelle befindet. Alles funktioniert gut, außer dass die App mit den folgenden Fehlern abstürzt, wenn ich den Finger auf eine Zelle drücke:
-[UILongPressGestureRecognizer translationInView:]: unrecognized selector sent to instance 0x94670a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILongPressGestureRecognizer translationInView:]: unrecognized selector sent to instance 0x94670a0'
Ich weiß, was es bedeutet (normalerweise wird ein falscher Parameter an eine Instanz gesendet), aber ich weiß wirklich nicht, wie dies möglich ist, da mein Code keine Spur eines UILongPressGestureRecognizer enthält. Ich habe versucht, den LongPressGestureREcognizer ÜBERALL abzufangen (in der Zellklasse, in der Klasse der Tabellenansicht, vor der Zuweisung jeder Zelle), aber der Fehler ist immer noch derselbe (ich habe hier im Betreff viele Threads angeschaut und vertraue mir, die Syntax war richtig.
Wenn Sie weitere Unterlagen wünschen, können Sie diese gerne anfordern (es ist mein erster Beitrag hier, ich weiß nicht genau, was ich zeigen muss).
Vielen Dank für Ihre wertvolle Hilfe.
Ok, das Problem ist immer noch da. Entschuldigung :( Ich habe es irgendwie geschafft, einen Haltepunkt zu setzen und den Stack-Trace auszudrucken. Hier ist es:
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
Die App blockiert den Code:
-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
CGPoint translation = [gestureRecognizer translationInView:[self superview]];
edit Ich habe es gelöst, indem ich UILongPressGestureRecognizer abgefangen habe. Ist das ein sicherer Weg?
-(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;}