2009-02-01 11 views
14

Certaines applications, comme Photoshop, permettent aux utilisateurs de faire glisser une image à partir d'un navigateur Web ou de faire glisser un fichier du système de fichiers sur l'icône de l'application dans le dock. Cela ouvre le fichier dans cette application.Comment faire pour qu'une application OS X réagisse lorsqu'un fichier, une image, etc. est déposé sur son icône de station d'accueil?

Comment cela est-il fait? Je voudrais utiliser Cocoa et Objective-C, mais je suis intéressé par toutes les solutions dans toutes les langues.

+0

Je ne pense pas que vous pouvez utiliser Cocoa et C#.Je ne connais que les bindings Cocoa de Ruby, Python et Objective-C (Objective-C étant le mieux supporté, d'après ce que j'ai compris). Alors que vous pouvez écrire des applications OS X en utilisant C# avec Mono, je ne pense pas que vous pouvez utiliser Cocoa de C#. – Andy

+1

Recherche Cocoa # Andy. –

Répondre

4

Si votre application est basée sur un document et que vous avez correctement renseigné les clés nécessaires dans votre fichier Info.plist, cela signifie qu'il fonctionne. Lorsque l'utilisateur fait glisser un fichier dans la mosaïque Dock de votre application, Dock mettra en évidence votre application sur la mosaïque si le fichier est d'un type pour lequel vous vous êtes inscrit. Si l'utilisateur dépose le fichier, NSDocumentController instanciera l'une de vos classes de document. le fichier. Si le fichier n'est pas du type pour lequel vous vous êtes inscrit, les deux l'ignorent.

Votre application est-elle basée sur des documents? Si oui, le fichier est-il celui d'un type pour lequel vous vous êtes inscrit?

Pour plus d'informations:

+0

Le lien actuel vers "Guide de programmation d'applications basées sur des documents pour Mac" est https://developer.apple.com/library/mac/documentation/DataManagement/Conceptual/DocBasedAppProgrammingGuideForOSX/Introduction/Introduction.html – canhazbits

19

NSApplication vous permet de définir un délégué pour votre application. Si l'utilisateur fait glisser un fichier sur l'icône de votre station d'accueil, NSApplication appellera la méthode

- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename 

de votre objet délégué, dans le cas où il met en oeuvre une telle méthode. Dans le cas où le contenu est pas vraiment un fichier (par exemple si l'utilisateur sélectionne simplement le texte dans une application et il fait glisser sur l'icône de votre dock), la méthode déléguée

- (BOOL)applicationOpenUntitledFile:(NSApplication *)theApplication 

est appelé.

Voir NSApplication class reference

Fondamentalement, vous pouvez simplement créer un objet quelconque (par exemple un simple qui hérite simplement de NSObject), définir les deux méthodes ci-dessus dans l'objet et ne importe où dans votre code de démarrage de l'application que vous faites

whatever = [[YourObject alloc] init]; 
[[NSApplication sharedApplication] setDelegate:whatever]; 

Et c'est tout. Dès qu'un fichier ou un autre contenu est déposé sur l'icône du Dock, la méthode appropriée est appelée et doit gérer cette requête. BTW les mêmes méthodes sont appelées si votre application est associée à un type de fichier (par exemple .myFileType) et l'utilisateur double-clique sur un fichier avec cette extension dans le Finder. En réalité, les services de lancement envoient votre application à un événement Apple «open documents» («odoc»). NSApplication enregistre par défaut un handle pour cet événement et transmet la demande en appelant la méthode déléguée appropriée. Vous pouvez également écouter directement cet événement Apple, je suppose, mais pourquoi le feriez-vous? Traiter avec Apple Events directement est embarrassant. Lorsque votre application n'est pas Cocoa, mais Carbon (plain-C), vous devrez peut-être traiter directement l'événement Apple (je ne suis pas familier avec Carbon), mais dans Cocoa Apple attrape déjà les événements Apple les plus importants et les convertit dans les appels de délégation ou les notifications que votre application peut écouter.