Timbo
Timbo

Reputation: 1214

NSTimer Repeat x times only, then call a selector when it invalidates

Primarily I'm looking for a way to create an nstimer scheduledTimerWithTimeInterval that repeats every 3 seconds 10 times then invalidates just as a no-repeating timer would. Is this possible? Ideally an additional selector would fire once the timer invalidates too

Upvotes: 8

Views: 6701

Answers (1)

Alex Wayne
Alex Wayne

Reputation: 187272

Just keep track of the number of loops and keep a reference to the timer object. Then just invalidate it when you've done enough.

// ivars
int loopCount;
NSTimer *myTimer;

// Method that calls your timer.
- (void)doStuff {
    loopCount++;
    if (loopCount >= 10) {
        [myTimer invalidate];
        myTimer = nil;
    } else {

        //do my stuff here...

    }
}

// Method that kicks it all off
- (IBAction)startDoingStuff {
    myTimer = [NSTimer scheduledTimerWithTimeInterval:3.0
                                               target:self
                                             selector:@selector(doStuff)
                                             userInfo:nil
                                              repeats:YES];
}

Upvotes: 10

Related Questions