2011-12-10 27 views
5

Tôi đang cố gắng tìm ra lý do tại sao tôi gặp lỗi khi sử dụng locationOfTouch: inView. Cuối cùng tôi tạo ra một khung nhìn mới chỉ với cuộc gọi locationOfTouch và tôi vẫn nhận được SIGABRT bất cứ khi nào tôi chạm vào khung nhìn.locationOfKết quả chạm vào SIGABRT

Bên cạnh báo cáo nhập khẩu, đây là tất cả các mã trong quan điểm của tôi:

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

@end 

Đây là 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 

Nếu tôi sử dụng locationInView, nó hoạt động được. Nếu tôi sử dụng locationOfTouch: inView, chương trình sẽ hủy ngay khi chạm vào kết thúc.

EDIT: Trên bảng điều khiển, với lớp này, không có thông báo lỗi nào được hiển thị. IDE trỏ tới main.m với một SIGABRT. Nhấp vào kết quả 'Tiếp tục' trong 'EXC_BAD_INSTRUCTION'. Ảnh chụp màn hình có sẵn trên http://imageshack.us/photo/my-images/849/consolel.png/

+1

Vui lòng đăng thông báo lỗi trên bảng điều khiển. – zaph

+0

Bảng điều khiển trống. Xem tại đây: http://imageshack.us/photo/my-images/849/consolel.png/ – undetected

+0

Trong giao diện điều khiển của bạn gdb> làm một backtrace hoặc bt để xem chồng cuối cùng bị lỗi. Đặt biến môi trường NSZombieEnabled thành YES và gỡ lỗi mã của bạn. – 0x8badf00d

Trả lời

8

Sự cố này xảy ra vì nó giả định rằng có một số không chạm. Bạn cần xác nhận có một đầu tiên, như vậy:

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

suy nghĩ của phần "locationOfTouch:" nói "touchAtIndex:", nếu các mảng chạm rỗng (Khi bạn nhấc ngón tay lên hoặc di chuyển nó ra khỏi màn hình) thì không có touchAtIndex:0.

+0

Cảm ơn, điều đó đã thực hiện điều đó. – undetected

Các vấn đề liên quan