• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

NSTimer stoppt nicht

MoFuRo

Jamba
Registriert
10.06.10
Beiträge
55
Hallo zusammen,

ich versuche gerade ein kleines Spiel zu machen und hierfür will ich das ein Timer runter zählt und dann eine andere View eingeblendet wird. Hierfür verwende ich NSTimer. Alles funktioniert eigentlich sehr gut, nur manchmal will der Timer nicht stoppen. Mein Code sieht folgender maßen aus.

Code:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if(startTimer){
        theTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showTimerCount) userInfo:nil repeats:YES];
        startTimer = NO;
    }
}

- (void)showTimerCount{
    count++;    
    
    if(count > 10){    
        [theTimer invalidate];
        theTimer = nil;
        startTimer = YES;
        GameOverViewController *newView = [[GameOverViewController alloc] initWithNibName:@"GameOverViewController" bundle:nil];
    }
}

Ich konnte es bisher nicht fest machen wann er einfach nicht mehr aufhört zu zählen. Was mir auch aufgefallen ist, ist das er dann auch schneller zählt wenn er nicht stoppt. Ich nehme deshalb an das es mehrere Timer gibt die die Funktion aufrufen.

Wäre cool wenn mir jemand helfen kann.
 
Ist nur ne Vermutung, aber wo du den Timer bildest, gibst du als letzten Parameter
repeats:YES

an!? Kann es sein, dass das Ganze somit immer wieder wiederholt wird und somit von vorne beginnt?

Ist nur ein Gedanke, kannst ja mal mit NO probieren....

Auch komme ich, nur so nebenbei, mit deiner Variable startTimer nicht klar, dort wo der Timer gestartet wird, setzt du es auf NO, und dort wo du den Timer killst, auf YES ? Verkehrte Welt oder schlechte Variablenbenennung?
 
Viel kann man aus dem Code auch nicht herauslesen. Was mir auffällt:

- Wenn Du den Timer startest, setzt Du count nicht auf einen Anfangswert.
- Der Selector für den Timer sollte einen Parameter erhalten (siehe Dokumentation).
- Der GameOverViewController leaked.

MacApple
 
... und Setter / Getter sind auch out?

Viele Grüße
 
Hey, das kommt jetzt vielleicht ein wenig spät, aber andere könnte es noch interessieren.

Du rufst jedesmal wenn du auf den Bildschirm drückst (touches Began) den Timer erneut auf. du müsstest eine Funktion schreiben die für den Fall dass der Timer bereits läuft den Timer beim erneuten Drücken anhält.
Ich habe das ganze mit dem gameState gelöst.

/*in dem Fall hier mit einem Button, geht aber auch bei dir
kGameRuns und kGamePaused definiert mit #define kGameRuns 1 etc (denk dann an die Header erweiterungen, setter, getter, ... )*/


- (IBAction)pausePressed: (id)sender {

if(gameState == kGamePause){
gameState = kGameRuns;

mainTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target: self selector:@selector(updateTime) userInfo:nil repeats:YES];
}else{
gameState = kGamePause;
[mainTimer invalidate];

}