Ich bin neu bei NSOpenPanel/NSSavePanel/NSPanel. Ich verwende NSOpenPanel, um ein Verzeichnis auszuwählen, dessen Dateien meine App durchläuft und einige ziemlich zeitaufwändige Verarbeitungen vornimmt.
Ich kann -close auf dem Panel aufrufen, aber das gibt den Fokus nicht an das Hauptfenster zurück. Ich habe viel über das "Entlassen" des Panels gelesen - aber ich habe keine Methoden gefunden, die ein Panel oder ein Fenster eher "entlassen" als "schließen".
Ist es nur, dass ich einen Hintergrund-Thread (NSOperation) erstellen muss?
Dies ist das, was mein -chooseDidEnd:returnCode:contextInfo:
-(void) chooseDidEnd:(NSOpenPanel *)panel returnCode:(int)returnCode contextInfo:(void *)contextInfo
{
[panel orderOut:self];
[panel release];
if (returnCode == NSFileHandlingPanelOKButton)
{
[progressIndicator startAnimation:self];
[self doLotsOfTimeConsumingWork:[[panel URL] path]];
[progressIndicator stopAnimation:self];
}
}
Während das NSOpenPanel verschwindet, wird mein NSProgressIndicator nicht animiert und das Hauptfenster erwacht nicht zum Leben, bis nach -doLotsOfTimeConsumingWork: abgeschlossen.
Update Ich habe mir gerade den Code von NSOperationSample angesehen, und es sieht so aus, als ob das der richtige Weg wäre.