2010-01-29 2 views
3

대리인에 NSTimer를 설정하려고합니다. 객관적으로 매우 새로워졌습니다. 너무 사과하지 않으면 사과드립니다. 하지만 내가 쓴 것은 :대리자 메서드가있는 NSTimer

animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)((1.0/60.0) * animationFrameInterval) target:self.delegate selector:@selector(drawView) userInfo:nil repeats:TRUE]; 

불행히도 이것은 단지 작동하지 않습니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까? 내 마음이 튀었 어 !!

+0

는 미안 충돌 보고서에서 얻을 오류는 이것이다 : 는 [mugalugAppDelegate drawView] : 인식 할 수없는 선택기는 방법의 권리를 찾을 수 없습니다 의미합니다 예를 로 전송? – FlimFlam

답변

3

당신은 맞습니다.

@selector (drawView :)와 같이 메서드 이름에 콜론을 추가하기 만하면됩니다. 또한 관습 적으로 objective-c 코더는 YES와 NO를 사용합니다.

+0

아, 대단히 고마워 - 대접 받았다 !! – FlimFlam

4

대부분 drawView의 메서드 서명이 잘못되었습니다. NSTimer 클래스 참조에서 :

타이머가 실행될 때 대상에 보낼 메시지.

- (void)timerFireMethod:(NSTimer*)theTimer

그래서, 당신의 drawView 방법은 다음과 같아야합니다 : 선택기는 에게 다음과 같은 서명이 있어야합니다, 또한

- (void)drawView:(NSTimer*)theTimer 
{ 
// Draw the view 
} 

을이 일하도록 코드를 수정 (다음 콜론을 통지 "drawView") :

animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)((1.0/60.0) * animationFrameInterval) target:self.delegate selector:@selector(drawView:) userInfo:nil repeats:TRUE]; 

참고로, 나는 당신의 drawView이 무엇을 책임지는 지 잘 모르겠습니다. 그러나 그리기를위한 기본 메커니즘이 있으며, 이는 따라야합니다 (드문 경우 제외). 일반적으로 NSView가있는 경우 setNeedsDisplay을 호출하면 UI가 NSView의 drawRect:을 호출하여 NSView에 다시 그려 지도록 UI가 지시합니다. 나는 당신이 Objective-C를 처음 접했을 때부터 언급했기 때문에 이것을 깨닫지 못하고 결국 필요 이상의 코드를 작성하게됩니다. 이 디자인을 따르는 경우 타이머를 setNeedsDisplay으로 주기적으로 호출 할 수 있습니다.