2014-02-16 4 views
0

Этот вопрос является ответвлением моего предыдущего question ранее ранее, но все еще новый вопрос. У меня возникли проблемы с петлей таймера, что я объявленным в файле .m:Выходы таймера для Objective-C

// battery level connection timer 
- (void)batteryLevelTimerRun 
{ 
    batteryLevelSecondsCount = batteryLevelSecondsCount - 1; 
    int batteryLevelProgress = batteryLevelSecondsCount; 

    NSString *timerOutput = [NSString stringWithFormat:@"Battery Level: %d%%", batteryLevelProgress]; 
    batteryLevelLabel.text = timerOutput; 

    float batteryLevelProgressFloat = batteryLevelSecondsCount/100; 
    [batteryLevel setProgress:batteryLevelProgressFloat animated:YES]; 

    if (batteryLevelSecondsCount == 20) 
    { 
     batteryLevelLabel.textColor = [UIColor orangeColor]; 
    } 
    else if (batteryLevelSecondsCount == 10) 
    { 
     batteryLevelLabel.textColor = [UIColor redColor]; 
    } 
    else if (batteryLevelSecondsCount == 0) 
    { 
     [batteryLevelTimer invalidate]; 
     batteryLevelTimer = nil; 
    } 
} 

// battery level connection timer 
- (void)batteryLevelSetTimer 
{ 
    batteryLevelSecondsCount = 100; 
    batteryLevelTimer = [NSTimer scheduledTimerWithTimeInterval:9.0 target:self selector:@selector(batteryLevelTimerRun) userInfo:nil repeats:YES]; 
} 

В файле .h, я заявил:

@interface MonitoringViewController : UIViewController 

{ 
     IBOutlet UILabel *batteryLevelLabel; 
     IBOutlet UIProgressView *batteryLevel; 

     NSTimer *batteryLevelTimer; 
     int batteryLevelSecondsCount; 
} 

Я назначил [self batteryLevelTimer] на кнопки. Когда я запустил код, я получил нечетный ответ в поле UILabel batteryLevelLabel. Он сказал Battery Level: -1%. Любая идея, почему это было бы? Я также настраиваю UIProgressView на декремент вместе с меткой, а также дисфункциональный (был установлен в 0), вероятно, потому, что он считает, что значение, которое оно было задано, равно -1, так что оно по умолчанию равно 0 (значение UIProgressView составляет от 0.0 до 1.0). Есть ли какая-то математическая/логическая ошибка, которую я упускаю здесь?

+0

Пройдите через свой код, за строкой, от руки: что происходит, когда 'batteryLevelSecondsCount' равно 0? –

+0

@JoshCaswell Когда 'batteryLevelSecondsCount' равно 0, это выполняется:' [batteryLevelTimer invalidate]; 'и' batteryLevelTimer = nil; '. Я попытался проверить, вызывало ли это действие, добавив в 'UIAlertView', но он не запускался, что означает, что' batteryLevelSecondsCount' не устанавливает значение 0. – James

+0

Что происходит _before_, когда 'batterLevelSecondsCount' равно 0? –

ответ

0

Ваш код выглядит нормально и отлично работает в моем тестовом проекте (я подключил кнопку к аккумуляторуLevelSetTimer и метку подсчитали до нуля, как ожидалось). за прогресс бар части За исключением - вы должны изменить строку:

float batteryLevelProgressFloat = batteryLevelSecondsCount/100; 

к

float batteryLevelProgressFloat = batteryLevelSecondsCount/100.0; 

, потому что оба batteryLevelSecondsCount и 100 являются целыми числами, и целочисленное деление всегда дает целочисленный результат, который изменяется от 0 до 1 в твоем случае.

+0

Даже после изменения '100' на' 100.0' ничего не изменилось с помощью UIProgressView. Помимо этого, как бы вы объяснили проблему с «batteryLevelLabel»? – James

+0

@James Я думаю, вы должны установить некоторые точки останова и отладить свою программу, потому что ваш код работает для меня почти как есть (я портировал его в AppKit, чтобы избежать беспорядка с симулятором). Установите BP на первые строки обоих методов и посмотрите, что происходит. – user3125367

+0

@James Или просто 'NSLog (@"% d ", batteryLevelLabel);' чтобы узнать, какими значениями он стал. – user3125367

 Смежные вопросы

  • Нет связанных вопросов^_^