Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何添加多个计时器的输出_Ios_Nstimeinterval - Fatal编程技术网

Ios 如何添加多个计时器的输出

Ios 如何添加多个计时器的输出,ios,nstimeinterval,Ios,Nstimeinterval,我的实用程序应用程序将有20个单独的计时器,布局如下: - (void)updateTimer { NSDate *currentDate = [NSDate date]; NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; NSDateFormatt

我的实用程序应用程序将有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];
}

我想将所有的时间间隔加在一起,并将它们显示为字符串。我以为这很容易,但我就是做不到。我需要计算NSTimeInterval的总和,对吗?

您可以采取的几种方法。一种是创建一个计时器类,可以查询它的状态(运行、停止、未启动等)及其当前时间间隔。将所有计时器添加到集合中,例如
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 
将每个计时器添加到阵列:

MyTimer *myTimer = [[MyTimer alloc] init];
[myTimerArray addObject:myTimer];
适当时,对计时器集合进行迭代,并对停止的
计时器的时间间隔求和:

NSTimeInterval totalTimeInterval = 0.0;
for (MyTimer *timer in myTimerArray){
    if (timer.state == Stopped) {
        totalTimeInterval += timer.timeInterval;
    }
}

当您说要将所有时间间隔相加并显示为字符串时,您是指20个计时器中每个计时器的时间间隔吗?或者,问题是您启动计时器后的时间间隔?如果是后者,则只需格式化
timeInterval
,例如
stringtimestring=[nsstringstringwithformat:@“%f”,timeInterval]我认为您不需要所有的日期格式代码。要获得mm:ss,请使用模60获得分钟,剩余的是秒。是的,我需要添加用户需要使用的20个计时器中的任意一个的时间间隔。它可以是一个或一些,或全部。我想要每个计时器停止后的总时间。每个计时器都有单独的代码。谢谢。我确实找到了类似的方法,但你的解决方案看起来更有说服力。我将把这个标记为已回答。
NSTimeInterval totalTimeInterval = 0.0;
for (MyTimer *timer in myTimerArray){
    if (timer.state == Stopped) {
        totalTimeInterval += timer.timeInterval;
    }
}