Reputation: 28720
I have a timer something like this:
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateCountdown)
userInfo:nil
repeats:YES];
I am updating a label's text using this timer. At a certain condition, I want to check if the timer is active then invalidate the timer. My question is how do I find that timer is active or not?
Upvotes: 30
Views: 24301
Reputation: 34513
In Swift, you can use the isValid
boolean to see if the timer is running:
if timer.isValid {
// Do stuff
}
From the Apple docs:
A Boolean value that indicates whether the receiver is currently valid. (read-only)
true if the receiver is still capable of firing or false if the timer has been invalidated and is no longer capable of firing.
Upvotes: 1
Reputation: 2802
When a non repeating timer fires it marks itself as invalid so you can check whether it is still valid before cancelling it (and of course then ridding yourself of it).
if ( [timer isValid] && yourOtherCondition){
[timer invalidate], timer=nil;
}
In your case you have a repeating timer so it will always be valid until you take some action to invalidate it. Looks like in this case you are running a countdown so it will be up to you to make sure you invalidate and rid yourself of it when the countdown reaches the desired value (In your updateCountdown method)
Upvotes: 70
Reputation: 844
Keep the timer in an instance variable, and set timer = nil
when there's no timer running (i.e. after you call [timer invalidate]
). Then, to check if the timer is active, you can just check whether timer == nil
.
Upvotes: 5