Ошибка цикла for для NSTimer
Я хочу иметь NSTimer, который будет запускать селектор каждые x секунд, если определенное условие (селектор NO
) правда. Значение х должно измениться следующим образом - 10, 20, 40, 60, 120.
Если селектор изменится на YES
(возвращает BOOL
) таймер должен остановиться и изменить его начальное время на 10 секунд.
У меня есть этот код для таймера:
double i;
for (i= 10.0; i < maxInternetCheckTime; i++) {
[NSTimer scheduledTimerWithTimeInterval:i
target:self
selector:@selector(checkForInternetConnection)
userInfo:nil
repeats:NO];
NSLog(@"Timer is %f seconds", i);
}
Но результат, который я получаю, просто не тот, который я намеревался увидеть в начале:
2012-12-21 19:25:48.351 Custom Queue[3157:c07] Timer is 10.000000 seconds
2012-12-21 19:25:48.352 Custom Queue[3157:c07] Timer is 11.000000 seconds
2012-12-21 19:25:48.352 Custom Queue[3157:c07] Timer is 12.000000 seconds
2012-12-21 19:25:48.352 Custom Queue[3157:c07] Timer is 13.000000 seconds
2012-12-21 19:25:48.352 Custom Queue[3157:c07] Timer is 14.000000 seconds
2012-12-21 19:25:48.352 Custom Queue[3157:c07] Timer is 15.000000 seconds
И так далее. Что я делаю не так в этой довольно тривиальной задаче?
2 ответа
for (i= 10.0; i < maxInternetCheckTime; i++) { [NSTimer scheduledTimerWithTimeInterval:i
Вы планируете одновременное выполнение набора из 10 таймеров через 10, 11, 12,13 и т. Д. Секунд.
Вам нужно всего один таймер, чтобы начать с:
[NSTimer scheduledTimerWithTimeInterval:10
target:self
selector:@selector(checkForInternetConnection:)
userInfo:nil
repeats:NO];
затем в checkForInternetConnection
Вы планируете новый, если это необходимо:
-(void)checkForInternetConnection:(NSTimer*)firedTimer {
float interval = firedTimer.timeInterval;
interval *= 2;
if (<CONDITION>) {
[NSTimer scheduledTimerWithTimeInterval:interval
target:self
selector:@selector(checkForInternetConnection)
userInfo:nil
repeats:NO];
}
}
Надеюсь логика понятна
вы планируете проверку;
вы делаете проверку;
если проверка не в порядке, вы планируете новый.
Надеюсь, поможет.
Вы печатаете i
, который увеличивается на 1 в каждом цикле, начиная с 10. Это правильный вывод.