1

我需要一点帮助我有一个方法可以获取诸如 50 之类的值,然后将该值分配给 trackDuration,因此 NSNumber *trackDuration = 50,我希望该方法每秒从 trackDuration 的值中减去 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);
}}

任何帮助将不胜感激,非常感谢萨米。

4

2 回答 2

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
}

NSTimer 需要 iOS 2.x 或更高版本

于 2011-02-03T23:24:39.150 回答
0

让这个方法循环运行会让你的应用在运行的整个过程中都没有响应——你甚至不会看到任何 UI 更新。相反,您应该使用间隔为一秒的 NSTimer,并在计时器触发时更新经过的时间。

于 2011-02-03T23:29:11.503 回答