2009-07-14 12 views
1

inkrementiert wird Jede 1/16 Sekunde, ich habe einen NSTimer, der feuert und jedes Mal eine Methode aufruft. Ich möchte eine statische ganze Zahl erstellen, die bei jedem Aufruf der Methode um '1' erhöht wird. Sobald die statische Ganzzahl gleich '16' ist, möchte ich eine andere Methode aufrufen und die statische Ganzzahl auf '0' zurücksetzen.Statischer Zähler, der wiederholt von NSTimer

Jede Einsicht wird sehr geschätzt. (Die Sprache ist Obj-C)

Antwort

6

erklären es also als static int ...

static int myCounter; 
@implementation SomeClass 

- (id) init { 
    if (self = [super init]) { 
    myCounter = 0; 
    NSTimer * someTimer = [NSTimer scheduledTimerWithTimeInterval:(1/16) target:self selector:@selector(fireTimer:) userInfo:nil repeats:YES]; 
    } 
    return self; 
} 

- (void) fireTimer:(NSTimer *)aTimer { 
    myCounter++; 
    if (myCounter == 16) { 
    [self doSomeMethod]; 
    myCounter = 0; 
    } 
} 

@end 
+0

Ich glaube, er die Methode muss in jeder Sekunde zu ändern, was dies nicht erreichen. Sie können einen Funktionszeiger übergeben (wenn obj C sie hat) als zweiten Parameter, und rufen Sie das einfach auf. – jkeys

+0

@Hooked das ist nicht möglich. Sobald ein Timer erstellt wurde, können Sie nicht mehr ändern, welcher Selektor ausgelöst wird. Die einfache Lösung besteht also darin, eine if() -Anweisung in der Fire-Methode zu haben und von dort aus zu verzweigen. –

+0

@Hooked und über die Übergabe eines Selektors als zweiter Parameter, können Sie dies auch nicht tun. NSTimer-Fire-Methoden müssen eine sehr spezifische Signatur haben (return void, einzelner NSTimer * -Parameter). –