Unterstützung von "Doppel-Click auf Datei"

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Unterstützung von "Doppel-Click auf Datei"

    Hallo zusammen,

    meine Applikation soll beim Doppel-Click auf eine unterstützte Datei gestartet werden und die Datei öffnen.
    Ich nutze dafür im AppDelegate die Methode

    Quellcode

    1. - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
    und soweit klappt das auch alles. Allerdings ist die Animation im Finder komplett verzögert.
    Ein Doppelclick öffnet meine Applikation, die Datei wird erfolgreich geöffnet und der Inhalt angezeigt.
    Aber erst dann zeigt der Finder seine "Zoom"-Animation des Dateiicons. Das sieht irgendwie doof aus.

    Muss ich da im AppDelegate noch was machen? Oder ist das einfach so?

    Danke und Grüße,
    Alex
    --
    Wer ist dieser Root und warum gehören ihm alle meine Dateien??

    SIDplay5 for macOS on GitHub
  • Da meine App eine Dokumenten-basierte ist - und somit z. B. das Öffnen von Dateien anders (nämlich über einen NSDocumentController) erfolgt - kann ich nur vermuten.

    Allerdings würde es mich nicht wundern, wenn hier eine Abhängigkeit mit z. B. der AppDelegate-Methode applicationDidFinishLaunching: bestehen würde. Diese wird ja nach dem Open an den App-Delegate geschickt. Hast Du diese implementiert? Kann es sein, dass in den verschiedenen Methoden des App-Starts etwas synchron (und zu lange) läuft, was besser asynchron ausgeführt würde?

    Nur laut gedacht, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Hmm, danke für die Ideen.
    Habe mal ein "delayed loading" (openFile merkt sich die Datei und gibt sofort ein YES zurück) eingebaut, aber das hilft dabei leider auch nicht wirklich.
    Eventuell ist meine App zu klein/schnell? Wenn ich z.B. eine Dokumenten-basierte App so starte, hüpft erst das Icon im Dock, dann baut sich die App auf, dann kommt die Animation im Finder und kurz danach (manchmal zeitgleich) kommt dann das Dokument.
    Bei meiner App hüpft es im Dock, dann kommt das Dokument und dann die Animation im Finder.

    Interessant finde ich auch die Reihenfolge, in der die Methoden des Delegates angesprochen werden:

    Quellcode

    1. standard 12:43:25.193691+0100 AppDelegate: application: openFile:
    2. standard 12:43:25.260023+0100 AppDelegate: applicationDidFinishLaunching
    3. standard 12:43:27.469772+0100 AppDelegate: applicationSupportsSecureRestorableState
    4. standard 12:43:37.501691+0100 AppDelegate: applicationShouldTerminate
    5. standard 12:43:37.528520+0100 AppDelegate: applicationWillTerminate
    Also kommt openFile vor dem DidFinishLaunching.
    --
    Wer ist dieser Root und warum gehören ihm alle meine Dateien??

    SIDplay5 for macOS on GitHub
  • Alexco schrieb:

    Also kommt openFile vor dem DidFinishLaunching.
    Das war gemäß der oben verlinkten Doku auch zu erwarten: "If the user started up the application by double-clicking a file, the delegate receives the application:openFile: message before receiving applicationDidFinishLaunching:"

    Hilft aber nicht weiter, sorry, keine weitere Idee von mir...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Leider nein, es werden keine Daten bis auf die Datei selbst geladen. Und die ist nur ca. 20k groß.
    Aber ich habe den Effekt auch, wenn openFile mit "YES" beende, ohne die Datei wirklich zu laden. Eventuell schaue ich mir doch mal eine Document-based App an. Hatte bisher nur keine Lust, da ich eigentlich immer nur ein Dokument gleichzeitig geöffnet haben wollte (sind Audio-Dateien, klingt halt doof, wenn die alle sofort los plärren :D )
    --
    Wer ist dieser Root und warum gehören ihm alle meine Dateien??

    SIDplay5 for macOS on GitHub
  • Habe jetzt alles aus meiner "applicationDidFinishLaunching" rausgenommen, was irgendwie geht. Keine Änderung, bin ratlos.
    Selbst wenn ich die Datei gar nicht mehr lade, sieht das immer noch so aus. Ratlos....

    Quellcode

    1. - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    2. NSLog(@"AppDelegate: applicationDidFinishLaunching");
    3. // Insert code here to initialize your application
    4. //[self openPlayer];
    5. [[self window] setDelegate:self];
    6. // initialise toolbar
    7. [[self playStop] setEnabled:NO];
    8. [[self prevSubSong] setEnabled:NO];
    9. [[self nextSubSong] setEnabled:NO];
    10. [[self moduleType] setTitle:@" "];
    11. [self updateWindow];
    12. if (applicationFinishedLaunching == NO) {
    13. if (delayedLoading) {
    14. //[self openURL:delayedLoading];
    15. }
    16. }
    17. applicationFinishedLaunching = YES;
    18. }
    Alles anzeigen
    --
    Wer ist dieser Root und warum gehören ihm alle meine Dateien??

    SIDplay5 for macOS on GitHub