2011-02-03 2 views
1

약간의 도움이 필요하다. 50과 같은 값을 얻는 방법이있다. 그러면 그 값을 trackDuration에 할당한다. 그래서 NSNumber * trackDuration = 50, 나는 원한다. 메소드는 1 초마다 trackDuration의 값에서 1을 뺀 다음 레이블을 갱신합니다. 레이블은 duration이라고합니다.Objective-c 매초마다 1에서 숫자를 얻고 카운트 다운하는 방법

내가 지금까지 가지고있는 것은 다음과 같습니다.

- (void) countDown { 
iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"]; 

NSNumber *trackDuration = [NSNumber numberWithDouble:[[iTunes currentTrack] duration]]; 
while (trackDuration > 0) { 
    trackDuration - 1; 
    int inputSeconds = [trackDuration intValue]; 
    int hours = inputSeconds/3600; 
    int minutes = (inputSeconds - hours * 3600)/60; 
    int seconds = inputSeconds - hours * 3600 - minutes * 60; 
    NSString *trackDurationString = [NSString stringWithFormat:@"%.2d:%.2d:%.2d", hours, minutes, seconds]; 
    [duration setStringValue:trackDurationString]; 
    sleep(1); 
}} 

어떤 도움

훨씬 사미, 고급에, 감사 감사하겠습니다.

답변

2

이 메인 스레드를 차단합니다, 당신은 값 trackDuration을 할당되지 않으므로 항상 남아있을 것입니다 50

trackDuration -1; 

해야합니다 또한

trackDuration--; // or trackDuration -= 1; 

내가 이런 식으로 할 것 :

- (void)startCountDown 
{ 
    [NSTimer scheduledTimerWithInterval:1.0f target:self selector:@selector(timerHit:) userInfo:nil repeats:YES]; 
} 
- (void)timerHit:(NSTimer *)p_timer 
{ 
    if(trackDuration <= 1 && [p_timer isValid]) 
    [p_timer invalidate]; 
// track duration is an instance variable 
trackDuration--; 
// update LABEL 
} 

아이폰 OS 2.x 또는 이상이 NSTimer

필요
+0

iOS 요구 사항은 중요하지 않습니다. iPhone OS 2는 타사 응용 프로그램을 처음으로 지원 한 사람이었으며, 분명히 Mac 프로그램입니다 (SBApplication 사용으로 증명 됨). – Chuck

+0

도움을 주셔서 감사합니다,하지만 더 이해가 되긴하지만 다음 경고가 나오고 작동하지 않는 것 같습니다. NSTimer '가'+ scheduledTimerWithInterval : target : selector : userInfo : repeats : '에 응답하지 않을 수 있습니다. – Sami

+0

해당 메소드 호출의 첫 번째 부분은 다음과 같아야합니다 : scheduledTimerWithTimeInterval : –

0

이 방법을 반복하면 앱이 실행되는 동안 응답이 없어져 UI 업데이트가 표시되지 않습니다. 대신 NSTimer를 1 초 간격으로 사용하고 타이머가 작동하면 경과 시간을 업데이트해야합니다.