• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

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.
 

Angel3DWin

Gala
Registriert
10.03.10
Beiträge
50
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?
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
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
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
... und Setter / Getter sind auch out?

Viele Grüße
 

myst91

Erdapfel
Registriert
16.09.13
Beiträge
1
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:mad:selector(updateTime) userInfo:nil repeats:YES];
}else{
gameState = kGamePause;
[mainTimer invalidate];

}