2011-12-10 8 views
5

私はlocationOfTouch:inViewを使用するとエラーが発生する理由を理解しようとしています。最終的に私はlocationOfTouchコールだけで新しいビューを作成しましたが、私はビューをタッチするたびにSIGABRTを取得します。ここでlocationOfTouch結果がSIGABRT

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

@end 

をIMPLです:import文は別に

は、ここに私のビュー内のすべてのコードだ私はlocationInViewを使用している場合

@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 

が、それは大丈夫動作します。私がlocationOfTouch:inViewを使用すると、タッチが終了すると直ちにプログラムが打ち切られます。

EDIT:このクラスでは、コンソールにエラーメッセージは表示されません。 IDEはmain.mにSIGABRTを指定します。 「続行」をクリックすると「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>バックトレースまたはbtを実行して、クラッシュした最後のスタックを確認してください。環境変数NSZombieEnabledをYESに設定し、コードをデバッグしてください。 – 0x8badf00d

答えて

8

タッチゼロがあると想定されるため、クラッシュします。あなたの指を持ち上げたり、それを移動するとタッチの配列が(空の場合、「touchAtIndex:」を言うように「locationOfTouch:」部分の

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

思う:あなたはそうのように、最初の1があることを確認する必要があります画面が表示されない場合)、touchAtIndex:0はありません。

+0

ありがとう、それはトリックでした。 – undetected