NSTimer的'for'循环错误

时间:2012-12-21 15:30:11

标签: iphone objective-c ios nstimer

我希望有一个NSTimer,如果某个条件(选择器为NO)为真,则每x秒触发一个选择器。 x的值应该像这样改变 - 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 个答案:

答案 0 :(得分: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];
   }
 }

我希望逻辑清晰:

  1. 您安排了支票;

  2. 你做了检查;

  3. 如果检查不正确,请安排新的。

  4. 希望它有所帮助。

答案 1 :(得分:-1)

您正在打印i,从10开始的每个周期都会增加1.这是正确的输出。