2012-10-26 3 views
1

일부 입력 이벤트에 상대적으로 인스턴스 변수를 업데이트하기 위해 블록을 사용하려고했습니다. 구현 파일에서객관적인 C 블록과 터치 이벤트가있는 셀프 자동 제공 BAD_ACCESS

@interface ViewController : UIViewController{ 
    CGPoint touchPoint; 
    void (^touchCallback)(NSSet* touches); 
} 
@property(readwrite) CGPoint touchPoint; 
@end 

: 내의 UIViewController 클래스에서

나는 몇 가지 있지만 시도

-(void)touchesBegin:(NSSet *)touches withEvent:(UIEvent *)event{ 
    touchCallback(touches); 
} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
    touchCallback(touches); 
} 

: 콜백 기능에

-(id) init{ 
if (self = [super init]){ 
    touchCallback = ^(NSSet* set){ 
     UITouch * touch= [set anyObject]; 
     self.touchPoint = [touch locationInView:self.view]; 
     }; 
    } 
    return self; 
} 

내가 블록을 사용 자체 인스턴스를 사용할 때 BAD_ACCESS가 있습니다. 나는 문제가 어디 있는지 이해하지 못한다.

답변

1

당신은 블록을 복사해야합니다

그 블록은 스택에 생성하고 당신이 그것을 사용하려는 경우 나중에 힙에 복사 복사본을 만들 필요가 있기 때문이다
- (id)init { 
    if (self = [super init]) { 
     touchCallback = [^(NSSet* set){ 
      UITouch * touch= [set anyObject]; 
      self.touchPoint = [touch locationInView:self.view]; 
     } copy]; 
    } 
    return self; 
} 

. (이 블록은 if 문 범위 끝 부분에 "없어져")

+0

감사합니다 :) 블록 및 스택에 대한 자세한 문서를 찾았습니다. 이제 답장을 보내 주시면 감사하겠습니다. :) – yageek