[Résolu] Permettre l'ouverture de fichiers.

LeeroyLeeroy Membre
octobre 2010 modifié dans API AppKit #1
Bonjour,

    Dans la continuation de mon application j'aimerai que celles ci puisse ouvrir n'importe quelle type de fichiers. J'ai déjà  la méthode pour que l'application puisse ouvrir une liste de fichier NSArray de NSURL, mais je n'arrive à  trouver comment lancer l'application avec une liste de fichiers, sachant aussi que je n'utilise pas la structure de document et que l'application ne doit pas avoir d'extension associée.

J'espère avoir été clair.

Merci d'avance.

Réponses

  • laudemalaudema Membre
    16:48 modifié #2
    Hélas non, mais je reconnais être un peu obtus bien volontiers, je ne t'ai pas trouvé "clair".
    Qu'entends tu par "ouvrir une liste de fichiers" ?
    Si c'est une liste en interne tu la stockes à  la fermeture de ton appli et tu la recharges au démarrage puis tu charges les fichiers qui sont dedans.
    Pour la gestion des fichiers la documentation est ici http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LowLevelFileMgmt/Introduction.html#//apple_ref/doc/uid/10000055-SW1

  • tabliertablier Membre
    octobre 2010 modifié #3
    Pour répondre à  ta question, il faut que tu nous dises comment tu obtiens cette liste de fichiers?
    - liste connue par le logiciel lors de son ouverture (userDefaults ou liste "en dur")?
    - glissé-déposé d'une sélection multiple sur l'icone du logiciel ou sur une de ses fenêtres?
    - appel du logiciel par un autre logiciel qui fournit la liste comme paramètre d'ouverture?
    - autre?

    Une fois que tu as la liste, l'ouverture de chaque fichier se fait dans une boucle et dépend du type de chacun: texte, xml, strings, plist ..... etc
    Le conseil de laudema d'aller voir la doc du NSFileManager est pertinent.
  • LeeroyLeeroy Membre
    16:48 modifié #4
    Déjà  merci de m'avoir répondu,

    Alors, je sélectionne des fichiers dans le finder puis je fais un glisser déposer sur mon application. Ou dis encore autrement comment sont passés les fichiers à  une application à  l'ouverture (par "glisser déposer" ou "ouvrir avec"), en C standard c'est dans les paramètres du main qu'on retrouve les fichiers, mais là ?

    Au final c'est pas l'ouverture qui pose problème ni le traitement à  faire sur chaque fichier mais bien obtenir cette liste. Je n'arrive malheureusement pas à  trouver les bon mots clef pour une recherche.

    Suis-je plus clair?
  • tabliertablier Membre
    16:48 modifié #5
    Tu devrais regarder les références suivantes:
    draggingEntered, prepareForDragOperation, performDragOperation, concludeDragOperation
    et le delegate
    - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename.
    Et chercher des examples sur le drag and drop chez Apple.
  • mpergandmpergand Membre
    16:48 modifié #6
    Il faut que du définisses un DocumentType avec pour extension '*" (même pour une appli non document-based)
    ainsi ton appli ouvrira tous les sortes de fichiers (y compris un dossier)

    Il faut ensuite que ton controller soit delegate de NSApplication.

    tu implémentes dans ce controller la méthode:
    - (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames

    et voilà   :)
  • LeeroyLeeroy Membre
    16:48 modifié #7
    Merci pour le delegate... J'aurai du m'en douter que ça allait être un truc comme ça... Et sinon chronologiquement comment ça se passe ? Chargement du nib et de son contrôleur (qui sera le delegate) init du contrôleur, contrôleur définit comme délégué dans l'init et c'est seulement après le message est envoyé au délégué?

    Merci pour le type, j'y avais rêver sans jamais l'oser :P
  • tabliertablier Membre
    octobre 2010 modifié #8
    Il faut que du définisses un DocumentType avec pour extension '*" (même pour une appli non document-based)
    ainsi ton appli ouvrira tous les sortes de fichiers (y compris un dossier)
    effectivement, j'avais oublié cela. Le fait de mettre "*" comme type, fait que l'utilisateur pourra mettre n'importe quel type de fichier sur l'icône et l'application s'ouvrira. Donc,  dans application:openFiles: la première chose à  faire est de regarder dans la liste s'il y a des fichiers du type que tu souhaites.
    Pour définir le delegate, tu le fais sous IB entre le File's owner du nib principal de l'application et l'objet controleur. Pour la synchronisation, l'AppKit appelera la méthode delegate au moment opportun, donc tu ne t'en occupes pas.
  • LeeroyLeeroy Membre
    16:48 modifié #9
    C'est marrant mais même quand je n'ouvre qu'un fichier ça passe dans application:openFiles: (alors qu'il y a une version sans tableaux) ... Enfin tout marche très bien merci beaucoup. Et à  très vite sur un nouveau topic pour plein d'autres questions.  :P
Connectez-vous ou Inscrivez-vous pour répondre.