Этот вопрос является ответвлением моего предыдущего 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). Есть ли какая-то математическая/логическая ошибка, которую я упускаю здесь?
Пройдите через свой код, за строкой, от руки: что происходит, когда 'batteryLevelSecondsCount' равно 0? –
@JoshCaswell Когда 'batteryLevelSecondsCount' равно 0, это выполняется:' [batteryLevelTimer invalidate]; 'и' batteryLevelTimer = nil; '. Я попытался проверить, вызывало ли это действие, добавив в 'UIAlertView', но он не запускался, что означает, что' batteryLevelSecondsCount' не устанавливает значение 0. – James
Что происходит _before_, когда 'batterLevelSecondsCount' равно 0? –