2010-03-22 4 views
13

Wie kann ich eine Datei (oder wählen Sie im Finder öffnen) eines Typs in der Info.plist auf mein Dock-Symbol und dann eine Methode mit dem vollständigen Pfad der Datei aufrufen ?Löschen von Dateien auf Dock-Symbol in Cocoa

+0

Ich verstehe die Frage nicht. Zieht der Benutzer eine Datei auf Ihr Dock-Symbol oder möchten Sie die Datei programmgesteuert öffnen? –

+0

Ich meine, tatsächlich den Pfad zu der Datei zu erhalten, die auf dem Dock-Symbol abgelegt wurde. –

Antwort

15

Wenn Sie Ihre Info.plist herauf CFBundleDocumentTypes Array richtig eingestellt haben (entweder ‚LSItemContentTypes‘ oder ‚CFBundleTypeExtensions‘), dann brauchen Sie nur einen NSApplication Delegierten einzurichten und die delegierte Methode zu implementieren, application:openFile:.

Wenn mehrere Dateien gleichzeitig gelöscht werden sollen, implementieren Sie application:openFiles:.

Für die versprochenen Dateien (NSFilesPromisePboardType/kPasteboardTypeFileURLPromise) siehe Dropping promised files on to application icon in Dock.

+0

Ich habe mein CFBundleDocumentTypes-Array ordnungsgemäß eingerichtet und die Methode geschrieben, aber das Dock-Symbol akzeptiert meine Datei einfach nicht. –

+0

Tristian Seifert: Eine mögliche Ursache für dieses Problem ist, dass Sie ein UTI in Ihrem Plist angegeben haben, aber es war das falsche: http: // boedzo.org/blog/archives/2007-07-23/how-to-machen-your-apps-dock-tile-highlight Sie sollten auch sicherstellen, dass Sie alle UTIs importieren, die Sie im plist erwähnen: http://developer.apple. com/mac/library/documentation/FileManagement/Conceptual/converting_utis/ –

+0

Nachdem ich diese beiden Dokumente gelesen habe, verstehe ich immer noch nicht ganz, wie ich UTIs zu meinem bestehenden PList hinzufügen kann. Hier ist ein kleiner Teil meiner Info.plist: \t \t \t \t \t CFBundleTypeIconFile \t \t \t Draft.icns \t \t \t CFBundleTypeExtensions \t \t \t \t \t \t \t podraft \t \t \t \t \t \t CFBundleTypeName \t \t \t Post Entwurf \t \t Was hätte ich zu dieser Definition hinzuzufügen, so dass das Dock wird die Datei akzeptieren? –

0

Wenn Sie tatsächlich eine dokumentenbasierte App erstellen, müssen Sie bei der Einrichtung des Pfades viel mehr Arbeit erledigen, als Sie benötigen. Verwenden Sie einfach die dokumentenbasierte Anwendungsvorlage. Der Dokumenten-Controller erstellt eine Instanz der richtigen Klasse für Sie; Sie müssen nur diese Klasse schreiben.

Eine Anwendung, die Sie auf diese Weise erstellen, behandelt Datei-Drops (indem Sie sie als Dokumente öffnen) kostenlos.

+0

Es ist keine dokumentbasierte App, es ist ein E-Mail-Reader, und ich möchte in der Lage sein, Entwürfe, Mailboxen usw. auf mein Dock-Icon zu ziehen. –

1

Wählen Sie Ihre Anwendung in der Zielgruppe des Seitenbereichs aus und verwenden Sie get info. Wählen Sie dann im neuen Fenster die Registerkarte Eigenschaften, um einen neuen Dokumenttyp hinzuzufügen. Benennen Sie es "Folder" für Bequemlichkeit und die OS-Typen muss "fold" werden; der Geschäftstyp und die Rolle, die Sie so lassen können.

+0

Danke Es hat mir geholfen, meine App zum Laufen zu bringen. – AmitSri

5

Auf aktuellen Systemen können Sie einen UTI statt der alten vierköpfigen Typen (wie fold oben) verwenden. In Xcode Dokument-Typ-Editor, stellen einen neuen Typ mit:

  • Name: Ordner
  • Identifikation: public.folder

public.folder ist ein Subtyp von public.directory. public.folder gleicht Verzeichnisse ab, die dem Benutzer als solche erscheinen, d. H. Keine Pakete wie .app Wrapper.

8

Hier ist eine aktualisierte Lösung für Xcode 5. In AppDelegate.m

-(BOOL)application:(NSApplication *)sender openFile:(NSString *)filename 
{ 
    NSLog(@"%@", filename); 
    return YES; 
} 

Und in Xcode Setup-Dokumenttypen unter Projekt> Ziele> Info: Project > Info > Document Types

Überprüfen Sie die Einstellungen in Info.plist in Falls Sie ein leeres Feld 'Dokumentinhaltstyp-UTIs' haben, das korrekt ausgefüllt oder gelöscht werden soll. Delete empty Document Content Type UTIs array from Info.plist

Ihr Info.plist sollte wie folgt aussehen: Document Types Info.plist

+0

große Antwort! sehr hilfreich. Danke, – gypsyDev

+0

Beachten Sie, dass dies Ihre Bewerbung akzeptieren * Datei *, nicht nur eine bestimmte Erweiterung, weil CFBundleTypeExtensions auf '*' gesetzt ist. Wenn Sie nur bestimmte Dateierweiterungen unterstützen, geben Sie diese stattdessen an. Andernfalls bietet das Betriebssystem an, zufällige Dateien mit Ihrer Anwendung zu öffnen, nur damit Ihre App dann fehlschlägt. – uliwitness