Dateien beim App Starten einlesen, Kontextmenü "Öffnen mit..."

  • Dateien beim App Starten einlesen, Kontextmenü "Öffnen mit..."

    Guten Tag!

    Ich hoffe ich bin jetzt nicht zu blind in der Suche gewesen...

    Es geht um folgendes:
    Ich möchte gern, dass mein Programm beim Starten Dateien einliest. Genauer, ich möchte im Finder Dateien markieren und dann mittels Kontextmenü angeben, "Öffnen mit..." -> meiner App. Es sollen Bilddateien sein, die dann in meinem Programm eingelesen werden.

    Mein bisheriges Suchen im Netz brachte mich nicht auf die richtige Spur. Ich habe eine nicht Dokumenten basierte Applikation, ist es auch mit einer solchen möglich? Wenn ich das Ganze aktuell probiere bekomme ich folgende Meldung:

    PHP-Quellcode

    1. Es ist nicht bekannt, ob dieses Programm JPEG-Bild-Dateien öffnen kann

    und wenn ich es dann trotzdem probiere:

    PHP-Quellcode

    1. The document “xyz.jpg” could not be opened. MyApp cannot open files in the “JPEG image” format.


    Wo sage ich meiner Applikation welche Arten von Dateien diese öffnen kann oder soll?
    Wo bekomme ich die Dateien (Dateinamen dann her), welche Methode liefert mir diese?

    Vielen Dank!
    fin
  • Danke für die Hilfe...

    Ok jetzt habe ich in meinem Projekt in der linken Leiste Targets aufgeklappt und mein Projekt ausgewählt. Dann info und beim Tab Properties zwei Document Types hinzugefügt.

    Name: Jpeg
    Extension: jpeg

    Name: Jpg
    Extension: jpg

    Beim Öffnen fällt nun die erste Meldung weg und der Dialog erkennt das es gehen soll. Nur kommt dann die zweite Meldung wie oben beschrieben:

    PHP-Quellcode

    1. The document “xyz.jpg” could not be opened. MyApp cannot open files in the “JPEG image” format.


    Was mache ich eventuell falsch???
  • Ok,

    wieder ein Schritt weiter. Ich habe jetzt in meiner main.m folgendes angepasst:

    Quellcode

    1. [NSApplication sharedApplication];
    2. [NSApp setDelegate: [MainController new]];
    3. return NSApplicationMain(argc, (const char **) argv);


    Wobei MainController die Methode:

    Quellcode

    1. -(void) application:(NSApplication*) theApplication
    2. openFiles:(NSArray*) files;

    implementiert. Bei einem Test kann ich sehen, dass diese Methode immer aufgerufen wird, egal ob ich eine Datei öffnen will oder mehrere.

    Dazu noch die Document Types gesetzt und es scheint zu funktionieren. Eine Schleife über die Dateien gibt alles aus was ich brauche.

    Ist das mit dem delegate so richtig implementiert oder muss ich noch etwas beachten?

    Gruß und Dank!
    fin
  • Noch eine Frage hat sich ergeben...

    Ich lese die Dateien in einen TableView ein (Zeige die Dateinamen in einem TableView an). Rufe ich meine bisherige openFile Methode auf, die bei schon laufendem Programm Dateien einliest, klappt alles wie es soll. TableView wird aktualisiert.

    Nun benutze ich in der delegate Methode zum Öffnen der Dateien den gleichen Code um die Dateinamen in einem TableView auszugeben (wieder verwendeter Code). Dazu ist ein Binding mit einem arrayController vorhanden.

    Warum wird mein TableView nicht aktualisiert, stimmt etwas beim Programmablauf nicht? Muss ich noch mehr Methoden überschreiben wenn ich ein App Delegate benutze? Bisher habe ich nur, die openFiles Methode implementiert.

    Ach ja und in der main.h sollte ein AutoRelease Pool hinzugefügt werden, sonst gibt es Fehler auf der Console.

    Gruß
    fin
  • Meinst Du File's Owner delegiert an meinen MainController? So funktioniert es, wenn ich das Programm aus xCode gestartet habe und dann versuche Dateien über das Kontextmenü hinzuzufügen und auch wenn ich es komplett aus dem OS starten lasse. Coole Sache, vielen Dank! *freu

    Beste Grüße
    fin
  • Hmm,

    kann man eigentlich im "Target" auch setzen, dass alle Dateien mit meinem Programm geöffnet werden können. Ich habe wirklich keine Lust mein Programm einzuschränken. Unter Properties im Target kann man ja Document Types setzen. Gibt es so etwas wie eine Wildcard, so dass alles mögliche unterstützt wird?

    Gruß
    fin