2010-12-10 9 views
0

Wenn mein Hauptviewcontroller wird zuerst angeklickt, startet er eine Demo zeigt (auf Wiederholung) wie folgt:Stoppen einer Programmschleife

showingDemo = YES; 
[self startDemo]; 

- (void)startDemo { 
    if (showingDemo) { 
     [self performSelector:@selector(stepone) withObject:nil afterDelay:1.5f]; 
     [self performSelector:@selector(steptwo) withObject:nil afterDelay:2.0f]; 
     [self performSelector:@selector(stepthree) withObject:nil afterDelay:3.8f]; 
     [self performSelector:@selector(stepfour) withObject:nil afterDelay:4.3f]; 
     [self performSelector:@selector(startDemo) withObject:nil afterDelay:5.6f]; 
    } 
} 

Wenn es ein zweites Mal angeklickt wird, bringe ich einen neuen Viewcontroller auf dem Bildschirm

showingDemo = NO; 
[self.view addSubview:newView]; 

Ich dachte, dies würde die Endlosschleife stoppen.

Wenn der Benutzer auf meinem Haupt-Viewcontroller kehrt zurück:

[newView.view removeFromSuperview]; 

und Klicks auf dem Bildschirm wieder:

showingDemo = YES; 
[self startDemo]; 

meine app Bei der Prüfung, ob ich (schnell klicken zurück, bevor die Schleife hat hatte Zeit zu beenden, scheint das Programm zweimal durch die Schleife zu laufen - die eine, die vorher ging und die neue - und daher sieht es ganz komisch aus, mit der "Dreischritt" -Funktion, die vor "Schritt" und so weiter passiert.

Jeder weiß einen besseren Weg, die Schleife zu stoppen, die ich für gut programmiert habe, so dass, wenn ich es später erneut beginne, es nicht mehrere Schleifen laufen lässt, denkend, dass das vorherige nicht beendet worden ist?

Thanks so much!

Antwort

3

Wenn Sie showingDemo auf NO setzen, rufen Sie NSObject die cancelPreviousPerformRequestsWithTarget: alle ausstehenden Anfragen ausführen zu stornieren:

showingDemo = NO; 
[NSObject cancelPreviousPerformRequestsWithTarget:self]; 
[self.view addSubview:newView]; 
+0

Schöne. Einfach. Genial. Vielen Dank! – RanLearns

Verwandte Themen