0

NO特定の条件 (セレクターは) が trueの場合、x 秒ごとにセレクターを起動する NSTimer が必要です。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

等々。このかなり些細な作業で何が間違っているのでしょうか?

4

2 に答える 2

2
      for (i= 10.0; i < maxInternetCheckTime; i++) {
         [NSTimer scheduledTimerWithTimeInterval:i

10、11、12、13 秒などの後に実行されるように、同時に 10 個のタイマーのセットをスケジュールしています。

最初に必要なタイマーは 1 つだけです。

[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

これは、10 から始まる各サイクルで 1 ずつ増加しますi。これは正しい出力です。

于 2012-12-21T15:34:34.813 に答える