2012-11-04 3 views
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를 합산해야합니다.

+0

모든 시간 간격을 함께 추가하고 문자열로 표시하려는 경우 20 개의 타이머 각각의 시간 간격을 의미합니까? 또는 타이머를 시작한 후 시간 간격을 확보하는 데 문제가 있습니까? 후자의 경우 'String timeString = [NSString stringWithFormat : @ "% f", timeInterval]과 같이'timeInterval'을 포맷하면 모든 날짜 형식 코드가 필요하다고 생각하지 않습니다. – bobnoble

+0

mm : ss를 얻으려면 분수를 얻기 위해 모듈로 60을 사용하고, 나머지는 초입니다. – bobnoble

+0

예, 사용자가 사용해야하는 20 개의 타이머 중 하나의 시간 간격을 추가해야합니다. 그것은 하나 또는 일부 또는 모두 일 수 있습니다. 타이머가 정지 된 후에 각 타이머의 전체 시간을 원합니다. 각 타이머마다 별도의 코드가 있습니다. –

답변

0

몇 가지 방법을 사용할 수 있습니다. 하나는 상태 (실행 중, 중지됨, 시작되지 않음 등)와 현재 시간 간격에 대해 쿼리 할 수있는 타이머 클래스를 만드는 것입니다. 모든 타이머를 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; 
    } 
} 
+0

감사합니다. 나는 이와 비슷한 방법을 찾았지만 해결책은 더 웅변 해 보입니다. 저는 이것을 답으로 표시 할 것입니다. –