2009-02-28 5 views
1

사용자가 탐색 모음 단추를 클릭 할 때 호출되는 - (void) save 메서드가 있습니다. 그 방법은 다음 NSTimer이다NSTimer는 자동으로 유지됩니까?

[NSTimer scheduledTimerWithTimeInterval:.25f target:self selector:@selector(flashBackgroundRed) userInfo: nil repeats: flashRepeat]; 

flashBackgroundRed는 카운트를 유지하고 4 안타 후 NO flashRepeat로 설정하기 때문에, 타이머는 4 회 반복한다. 모두 사용자가 처음 클릭하여 저장하면 잘 작동합니다. 그러나 사용자가 잘못된 데이터를 저장하는 경우 계속해서 현재보기로 유지합니다. 어떤 이유로 플래시가 빠르게 증가합니다. 마치 각각 이전 간격의 25 %입니다. 이 타이머가 유지되지 않습니다. 저장 방법에만 있습니다.

사용자가 취소 버튼을 클릭하면 viewB (NSTimer가있는 모니터)가 팝업되고 viewA가 표시됩니다. viewA에서 viewB로 돌아가는 것은 timer invterval을 재설정하는 것 같습니다. 그러나 점차 빨라지는주기가 다시 시작됩니다. 어떤 아이디어?

답변

1

NSTimer는 예정대로 실행 루프에 보관됩니다.

약간 다른 시간에 똑같은 반복 타이머를 계속 만들어내는 것처럼 들리므로 서로 다른 빈도로 하나의 효과로 시각적으로 결합됩니다. 타이머에 대한 참조를 저장하고 새 타이머를 만들 때 타이머를 무효화하십시오.

+0

예 - 위 코드를 실행하기 전에 클래스 수준 참조를 선언하고 무효화했습니다. 잘 작동합니다. – 4thSpace

1

의도 한 것보다 더 많은 타이머를 예약하는 것처럼 들립니다.

예약되면 타이머는 무효화 될 때까지 유지됩니다. 반복 타이머는 수동으로 무효화해야합니다.

반복 횟수 인수는 타이머 반복 여부를 지정합니다. 타이머가 반복되어야하는지 여부는 반복 여부를 지정할 수 없습니다.

또한 선택기의 메서드 서명이 잘못되었습니다. 모양은 다음과 같아야합니다.

-(void)timerFireMethod:(NSTimer*)theTimer 

타이머 콜백에서 타이머 반복을 계속할지 여부를 결정할 수 있습니다. 그렇지 않으면 [타이머 무효화]를 호출하십시오.

+0

선택기와 함께 매개 변수를 어떻게 사용합니까? – 4thSpace

+0

다음과 같이 보일 것입니다. [NSTimer scheduledTimerWithTimeInterval : .25f 대상 : 셀렉터 : @selector (flashBackgroundRed :) userInfo : nil repeats : flashRepeat]; – sbooth

+0

왜 이렇게하지 않는거야? selector : @selector (flashBackground :: [UIColor redColor]) ... for ... - (void) flashBackground : (NSTimer *) theTimer attentionColor : (UIColor *) theColor { ...} – 4thSpace

관련 문제