Ich habe eine IBAction wo, wenn die Taste gedrückt wird, es einen ungeplanten Timer erstellt. Wenn dann derselbe Timer bereits gestartet wurde, // mache etwas, sonst starte den Timer, der erstellt wurde. Hier ist das, was ich bisher:Wie überprüfe ich, ob ein NSTimer läuft?
- (IBAction)button1Press {
NSMethodSignature *sgn = [self methodSignatureForSelector:@selector(onTick:)];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature: sgn];
[inv setTarget: self];
[inv setSelector:@selector(onTick:)];
NSTimer *tapTimer = [NSTimer timerWithTimeInterval: 1.0
invocation:inv
repeats:NO];
if (/*tapTimer is running*/) {//do something
}else{
NSRunLoop *runner = [NSRunLoop currentRunLoop];
[runner addTimer: tapTimer forMode: NSDefaultRunLoopMode];
}
}
Mein Problem ist das, was als Bedingung zu setzen. Wenn ich tapTimer isValid oder! = Nil setze, gibt es immer true zurück, da tapTimer bereits deklariert ist. Ich möchte den Timer nicht ungültig machen oder nullen, weil der Hauptzweck der Taste nur die Aktion ausführen soll, wenn die Taste zweimal in einem Zeitintervall von 1 Sekunde gedrückt wird.
Wenn es einen ganz anderen Ansatz zu tun gibt, was ich will dann bitte erzählen!
Vielen Dank!
Vielen Dank für Ihre Antwort nicht getestet! Das hat funktioniert, aber nur wenn ich das if (timer == _tapTimer) entfernt habe. Ich sehe nicht was das tun soll? –
Das ist nur dann der Fall, wenn mehrere Timer das gleiche gefeuerte Ereignis aufrufen. Es ist nicht wirklich notwendig. Die Timer haben auch Benutzerinfo-Wörterbücher, wenn Sie mehrere verwenden möchten. – Joe