为NSArray中的对象运行NSTimer

时间:2015-05-07 12:21:36

标签: ios objective-c timer nsarray nstimer

我有NSArray NSObjects。对于NSArray中的每个对象,我想运行一个计时器直到它完成,然后为下一个对象重新启动它。

NSArray中的对象将用于填充UITextField s。

我已经尝试for (NSObject *myThing in self.ArrayOfMyThings),它最终会在屏幕上正确显示一个计时器,同时实例化其他一些计时器。谢谢你的阅读。我欢迎有关如何完成这项软件工程专业的建议;)

我的计时器在此方法中实例化:

- (IBAction)startButton:(UIButton *)sender {
    if (self.isPaused == YES) {
        NSLog(@"startButton pressed");
        self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                      target:[NSBlockOperation blockOperationWithBlock:^{
                [self counting];
        }]
                                                    selector:@selector(main)
                                                    userInfo:nil
                                                     repeats:YES];
        self.isPaused = NO;

    }
}

计时器使用此方法计数:

- (void)counting {
    // ** If the timer is RUNNING **
    if (self.isPaused == NO && secondsRemaining > 0) {
        secondsRemaining-=1;
        elapsedTime+=1;
        self.timerLabel.text = [self timeFormatted:secondsRemaining];
        NSLog(@"counting: isPaused = %@", self.isPaused ? @"YES" : @"NO" );

        if (secondsRemaining < 4 && secondsRemaining > 0) {
            [self voiceCountdownAlert];
        }
    // ** If the timer is FINISHED **
    } else if (self.isPaused == NO && secondsRemaining == 0) {
        [self resetTimer];
        [self voiceTimerCompleteAlert];
        secondsRemaining = elapsedTime;
        elapsedTime = 0;
        self.timerLabel.text = [self timeFormatted:secondsRemaining];
        NSLog(@"counting: The timer was reset");
    // ** If the timer is paused **
    } else if (self.isPaused == YES) {
        NSLog(@"counting: isPaused = %@", self.isPaused ? @"YES" : @"NO" );
    }
}

此方法是我手动停止计时器的方法:

- (IBAction)stopButton:(UIButton *)sender {
    NSLog(@"stopButton pressed");
    [self.timer invalidate];
    self.timer = nil;
    self.isPaused = YES;
}

1 个答案:

答案 0 :(得分:1)

我建议创建一个类属性来跟踪&#34;当前&#34;的数字索引。 item,例如:

@property (nonatomic) NSInteger currentIndex;

使用此选项可识别您当前使用的阵列中的哪个项目。当你开始时,将其初始化为0.然后,在&#34;计时器完成&#34;例程,只需增加索引,确保您不在数组的末尾。如果您已完成,请invalidate您的计时器。如果没有,只需继续使用新的索引值。