Objective-C Метод, чтобы получить число, затем обратный отсчет в 1 каждую секунду - PullRequest
1 голос
/ 04 февраля 2011

мне нужна небольшая помощь, у меня есть метод, который получает значение, например, 50, затем он присваивает это значение trackDuration, поэтому NSNumber * trackDuration = 50, я хочу, чтобы метод каждую секунду минус 1 из значения trackDuration и обновления метка, метка называется продолжительностью.

Вот что у меня есть;

- (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 ]

2 голосов
/ 04 февраля 2011

Это заблокирует основной поток, и вы не назначаете значение 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
}

Требуется iOS 2.x или выше для NSTimer

0 голосов
/ 04 февраля 2011

Если этот метод будет запущен в цикле, ваше приложение перестанет отвечать на запросы в течение всего времени его работы - вы даже не увидите обновлений пользовательского интерфейса. Вместо этого вы должны использовать NSTimer с интервалом в одну секунду и обновлять истекшее время при срабатывании таймера.

...