0

NO如果某个条件(选择器是)为真,我想要一个 NSTimer 每隔 x 秒触发一次选择器。x 的值应该像这样变化 - 10、20、40、60、120。

如果选择器更改为YES(它返回 a 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

等等。在这个非常微不足道的任务中我做错了什么?

4

2 回答 2

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. 如果检查不正确,您安排一个新的。

希望能帮助到你。

于 2012-12-21T15:34:55.157 回答
-1

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

于 2012-12-21T15:34:34.813 回答