locationOfTouch导致SIGABRT

und*_*ted 5 cocoa-touch uikit uigesturerecognizer ios

我试图找出当我使用locationOfTouch时出现错误的原因:inView.最后我用locationOfTouch调用创建了一个新视图,每当我触摸视图时我仍然会得到一个SIGABRT.

除了import语句之外,这里是我视图中的所有代码:

@interface Dummy : UIView <UIGestureRecognizerDelegate> {
    UIPanGestureRecognizer *repositionRecognizer;
}

@end
Run Code Online (Sandbox Code Playgroud)

这是impl:

@implementation Dummy

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        repositionRecognizer = [[UIPanGestureRecognizer alloc] 
                 initWithTarget:self 
                         action:@selector(reposition:)];
        [repositionRecognizer setDelegate:self];
        [self addGestureRecognizer:repositionRecognizer];

        self.backgroundColor = [UIColor grayColor];
    }
    return self;
}

- (void)reposition:(UIGestureRecognizer *) gestureRecognizer {
    [gestureRecognizer locationOfTouch:0 inView:self];
    //[gestureRecognizer locationInView:self];
}

@end
Run Code Online (Sandbox Code Playgroud)

如果我使用locationInView,它可以正常工作.如果我使用locationOfTouch:inView,程序会在触摸结束后立即中止.

编辑:在控制台上,使用此类,不会显示任何错误消息.IDE使用SIGABRT指向main.m. 点击"继续"会显示"EXC_BAD_INSTRUCTION".http://imageshack.us/photo/my-images/849/consolel.png/上的截图

NJo*_*nes 8

这会崩溃,因为它假定存在触摸零.你需要先确认有一个,如下:

- (void)reposition:(UIGestureRecognizer *) gestureRecognizer {
    if (gestureRecognizer.numberOfTouches > 0){
        CGPoint point = [gestureRecognizer locationOfTouch:0 inView:self];
        NSLog(@"%@",NSStringFromCGPoint(point));
    }
}
Run Code Online (Sandbox Code Playgroud)

想想" locationOfTouch:"部分是说" touchAtIndex:",如果触摸数组是空的(当你抬起手指或将其移出屏幕时),则没有touchAtIndex:0.