1

私のユーティリティアプリには、次のように配置された20個の個別のタイマーがあります。

- (void)updateTimer
{
NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
NSString *timeString=[dateFormatter stringFromDate:timerDate];
stopWatchLabel.text = timeString;
[dateFormatter release];
}

- (IBAction)onStartPressed:(id)sender {
startDate = [[NSDate date]retain];

// Create the stop watch timer that fires every 1 s
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                  target:self
                                                selector:@selector(updateTimer)
                                                userInfo:nil
                                                 repeats:YES];
}

- (IBAction)onStopPressed:(id)sender {
[stopWatchTimer invalidate];
stopWatchTimer = nil;
[self updateTimer];
}

すべての時間間隔を合計して、文字列として表示したいと思います。これは簡単だと思いましたが、どうしてもわかりません。NSTimeIntervalsを合計する必要がありますよね?

4

1 に答える 1

0

あなたが取ることができるいくつかのアプローチ。1つは、その状態(実行中、停止中、開始されていないなど)および現在の時間間隔を照会できるタイマークラスを作成することです。などのコレクションにすべてのタイマーを追加しますNSMutableArray。次に、コレクション内のすべてのタイマーを反復処理し、停止しているタイマーについては、その時間間隔を取得して、それらを合計することができます。MyTimerクラスの部分ヘッダー:

enum TimerState {
    Uninitialized,
    Reset,
    Running,
    Stopped
};

typedef enum TimerState TimerState;

#import <Foundation/Foundation.h>

@interface MyTimer : NSObject

@property (nonatomic) NSTimeInterval timeInterval;
@property (nonatomic) TimerState state;

- (void) reset;
- (void) start;

@end 

配列を宣言します。

#define MAX_TIMER_COUNT 20
NSMutableArray *myTimerArray = [NSMutableArray arrayWithCapacity:MAX_TIMER_COUNT];

各タイマーをアレイに追加します。

MyTimer *myTimer = [[MyTimer alloc] init];
[myTimerArray addObject:myTimer];

必要に応じて、タイマーの収集を繰り返し、タイマーの時間間隔を合計しStoppedます。

NSTimeInterval totalTimeInterval = 0.0;
for (MyTimer *timer in myTimerArray){
    if (timer.state == Stopped) {
        totalTimeInterval += timer.timeInterval;
    }
}
于 2012-11-04T19:37:15.000 に答える