2011-12-10 22 views
5

我想弄清楚爲什麼我使用locationOfTouch:inView時出現錯誤。最後,我創建了一個只有locationOfTouch調用的新視圖,每當觸摸視圖時我仍然會獲得一個SIGABRT。locationOfTouch結果SIGABRT

從import語句

除此之外,這裏是我認爲所有代碼:

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

@end 

這裏的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 

如果我使用locationInView,它的作品沒關係。如果我使用locationOfTouch:inView,只要觸摸結束,程序就會中止。

編輯:在控制檯上,這個類沒有顯示錯誤消息。 IDE使用SIGABRT指向main.m。點擊「繼續」即會顯示「EXC_BAD_INSTRUCTION」。在http://imageshack.us/photo/my-images/849/consolel.png/上可用的屏幕截圖

+1

請發佈控制檯錯誤消息。 – zaph

+0

控制檯是空白的。看到這裏:http://imageshack.us/photo/my-images/849/consolel.png/ – undetected

+0

在您的控制檯gdb>做一個backtrace或bt看到最後一個崩潰的堆棧。將環境變量NSZombieEnabled設置爲YES並調試您的代碼。 – 0x8badf00d

回答

8

由於它假設有一個觸摸零點,因此崩潰。您需要確認有一個第一,像這樣:

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

覺得「locationOfTouch:」部分的話說「touchAtIndex:」,如果觸摸的數組爲空(當你擡起手指或將其關閉屏幕),那麼沒有touchAtIndex:0

+0

謝謝,這個伎倆。 – undetected