2012-04-05 3 views
0

Ich habe einen Countdown-Timer erstellt und es funktioniert super .. aber wenn es Null erreicht, zählt es weiter herunter .. so zeigt es -1, -2, -3 usw. Wie verhindere ich es aus dem machen?Verhindern, dass Countdown in Negative geht

Dies ist mein Code aus der Implementierungsdatei ..

@implementation ViewController 

-(IBAction)start { 

    myTicker = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showActivity) userInfo:nil repeats:YES]; 
} 

-(IBAction)stop { 
    [myTicker invalidate]; 
} 

-(IBAction)reset { 
    time.text = @"0"; 
} 

-(void)showActivity { 
    int currentTime = [time.text intValue]; 
    int newTime = currentTime -1; 
    time.text = [NSString stringWithFormat:@"%d", newTime]; 
} 

Ich vermute, dass ich einige Code irgendwo bin fehlt?

Antwort

0

Quick Fix ist zu ändern:

int newTime = currentTime - 1; 

in:

int newTime = (currentTime > 0) ? currentTime - 1 : 0; 

, dass der Countdown-Timer aus gehen unter Null zu stoppen. Wenn das alles ist, was Sie brauchen, sollte das ausreichen.


Es wird nicht Ausschalten der Timer oder eine Aktion auszuführen, wenn er Null erreicht. Dafür müssen Sie so etwas wie die folgenden Block nach dieser Zeile oben hinzufügen:

if ((currentTime > 0) && (newTime ==0)) { 
    // optionally turn off timer 
    fireZeroEvent(); 
} 

und bieten die fireZeroEvent() Funktion zu tun, was Sie tun müssen.

Ich sage optional Schalten Sie den Timer aus, da Sie ihn möglicherweise laufen lassen möchten, damit Sie den Countdown neu starten können, indem Sie einfach time.text setzen, ohne den Timer neu erstellen zu müssen.

Aus diesem Grund wird die fireZeroEvent() nur beim Übergang von 1 auf 0 aufgerufen, nicht jedes Mal, wenn der Timer nach Erreichen von Null ausgelöst wird.

+0

Dies schafft Fehler für mich :( – user1253207

+0

@ user1253207: sorry, ich falsch eingegeben - das erste ':' sollte ein gewesen sein '' - versuchen Sie es erneut – paxdiablo

+0

dank es jetzt paaren gearbeitet :) – user1253207