Ich habe eine while
Schleife, die für viele Sekunden ausgeführt wird, und deshalb möchte ich eine Fortschrittsanzeige (NSProgressIndicator) während dieses Prozesses aktualisieren, aber es aktualisiert nur einmal nach der Schleife abgeschlossen ist. Das Gleiche passiert übrigens, wenn ich einen Etikettentext aktualisieren möchte.Wie aktualisiere ich eine Fortschrittsanzeige in Cocoa während einer langen laufenden Schleife?
Ich glaube, meine Schleife verhindert, dass andere Dinge dieser Anwendung passieren. Es muss eine andere Technik geben. Hat das mit Threads oder sowas zu tun? Bin ich auf dem richtigen Weg? Kann mir bitte jemand ein einfaches Beispiel geben, wie ich meine Bewerbung "optimieren" kann?
Meine Anwendung ist eine Cocoa-Anwendung (Xcode 3.2.1) mit diesen beiden Methoden in meinem Example_AppDelegate.m
:
// This method runs when a start button is clicked. - (IBAction)startIt:(id)sender { [progressbar setDoubleValue:0.0]; [progressbar startAnimation:sender]; running = YES; // this is a instance variable int i = 0; while (running) { if (i++ >= processAmount) { // processAmount is something like 1000000 running = NO; continue; } // Update progress bar double progr = (double)i/(double)processAmount; NSLog(@"progr: %f", progr); // Logs values between 0.0 and 1.0 [progressbar setDoubleValue:progr]; [progressbar needsDisplay]; // Do I need this? // Do some more hard work here... } } // This method runs when a stop button is clicked, but as long // as -startIt is busy, a click on the stop button does nothing. - (IBAction)stopIt:(id)sender { NSLog(@"Stop it!"); running = NO; [progressbar stopAnimation:sender]; }
I Objective-C, Cocoa und Anwendungen mit einer Benutzeroberfläche, um wirklich neu bin. Vielen Dank für eine hilfreiche Antwort.
Vielen Dank, ich geb es ein Versuch dieses Wochenende! – Nick
Das ist, was ich gesucht habe.Funktioniert gut und das gibt mir einen guten Ausgangspunkt, um mehr darüber zu erfahren. Vielen Dank! – Nick
Danke für diesen Enchilada! Ich habe gerade etwas gelernt, was ich nicht wusste! Sehr aufgeregt, um über Blöcke und GCD zu erfahren !! –