Search code examples
nstimernstimeinterval

NSTimer/NSTimeInterval


Im trying to make a timer that counts down from 30 to 0 but this is the only way i could think to make it work, but it doesn't work. Anyone know what im doing wrong?

.h file

@interface countDownAppViewController : UIViewController {

UIButton *countDown;
UILabel *displayThis;
}

@property (nonatomic, retain) IBOutlet UIButton *countDown;
@property (nonatomic, retain) IBOutlet UILabel *displayThis;

-(IBAction) theCount:(id) sender;
-(IBAction) displayStuff:(id) sender;

@end

.m file

@synthesize countDown;
@synthesize displayThis;

-(IBAction) theCount:(id) sender    {
[NSTimer scheduledTimerWithTimeInterval:1.0
                                 target:self
                               selector:@selector(displayStuff:)
                               userInfo:nil
                                repeats:NO];

}
int batman=30;
-(void) viewDidLoad{

displayThis.text = [NSString stringWithFormat:@"%i",batman];
}

-(IBAction) displayStuff:(id) sender    {
while (batman >= 0){
    batman--;
    [NSTimer scheduledTimerWithTimeInterval:1.0
                                     target:self
                                   selector:@selector(displayStuff:)
                                   userInfo:nil
                                    repeats:NO];
displayThis.text = [NSString stringWithFormat:@"%i",batman];

}
}

Solution

  • Have you tried writing it the way it actually should have been written? The repeats argument is there exactly for this purpose. You can write a method like this:

    @interface Whatever: UIViewController
    {
        NSTimer *timer;
        int count;
        int maxCount;
    }
    
    - (void)countDownFrom:(int)cnt;
    
    @end
    
    @implementation Whatever
    
    - (void)countDownFrom:(int)cnt
    {
        maxCount = cnt;
        count = 0;
        timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                     target:self
                                   selector:@selector(doCount)
                                   userInfo:nil
                                    repeats:YES];
    }
    
    - (void)doCount
    {
        count++;
        textField.text = [NSString stringWithFormat:@"Count: %d", count];
        if (count >= maxCount)
        {
            [timer invalidate];
        }
    }
    
    @end