Ich bin neu in NSOpenPanel/NSSavePanel/NSPanel. Ich benutze NSOpenPanel, um ein Verzeichnis zu wählen, dessen Dateien von meiner App durchlaufen werden und eine ziemlich zeitaufwendige Verarbeitung machen.Schließen Sie NSOpenPanel, sobald Datei/Verzeichnis ausgewählt wurde
Ich kann -close auf dem Panel aufrufen, aber das gibt den Fokus nicht auf das Hauptfenster zurück. Ich habe viel darüber gelesen, wie man das Panel "ablehnt" - aber ich habe keine Methoden gefunden, die ein Panel oder ein Fenster "verwerfen" und nicht "schließen".
Ist es nur, dass ich einen Hintergrund-Thread (NSOperation) spawnen muss?
Dies ist, was mein -chooseDidEnd: return: 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 die NSOpenPanel weggeht nicht, mein NSProgressIndicator animiert nicht und das Hauptfenster bis nach -doLotsOfTimeConsumingWork am Leben nicht kommen: schließt ab.
aktualisiert Gerade bei NSOperationSample Code aussieht, und es ist die Art und Weise, wie das ist, suchen zu gehen.
danke. fwiw, -chooseDidEnd: returnCode: contextInfo: wurde fast wortwörtlich aus Apples NSOperationSample-Beispielcode übernommen. Würden Sie erklären, warum diese Version gegen Eigentumsregeln verstößt? Vielen Dank. – westsider
"wurde fast wortwörtlich aus Apples NSOperationSample-Beispielcode übernommen" <- Ooh, das ist nicht so nett! Re-Besitz: Sie haben das Objekt als Argument übergeben, also besitzen Sie es nicht - das ist alles. Selbst wenn Sie das Panel über alloc/init in der Methode erstellt haben, in der Sie die modale Sitzung starten, wäre "didEnd ..." nicht der richtige Ort für diese Version - die andere Methode sollte nicht undicht sein, so dass das Panel automatisch freigegeben werden musste (oder erstellen Sie es einfach über '[NSOpenPanel openPanel]', das automatisch wieder freigegeben wird). – danyowdee