Correspondre avec une autre Appli.

tabliertablier Membre
14:43 modifié dans API AppKit #1
Dans une appli ASStudio, la récupération de donné d'une autre appli passe par:

tell application "machin"
  ...... récup des données .....
end tell.

Comment fait-on pour faire la même chose en cocoa? j'ai envisagé 2 solutions:
1) Ecrire une routine en applescript et l'appeller depuis mon programme.
2) Interroger directement l'appli. (Apple events?)

Je ne trouve d'exemple pour aucun des deux cas!
Notez que l'appli que je veux interroger possède un dictionnaire et que je souhaite avoir en retour une dizaine données de natures diverses (string, integer...).

Les conseils et surtout les exemples seront les bien venus.

Réponses

  • novembre 2005 modifié #2
    AppleScript est notamment fait pour ça, justement. Regarde du coté de la classe NSAppleScript (FoundationKit).

    Sinon Cocoa dispose aussi de mécanismes permettant de faire ça (les objets distribués), mais cela suppose que tu connaisses le 'dictionnaire' de l'appli, et ce n'est que peu communiqué.
  • tabliertablier Membre
    14:43 modifié #3
    Comme toujours, une réponse appelle une autre question:
    Le dictionnaire de l'appli, est-ce bien celui que l'on peut lire sous Xcode,
    ou bien y en a t-il un autre?
  • GenoseGenose Membre
    14:43 modifié #4
    salut,

    dans ton cas je pense plus a "intercommunication entre appli" qui un principe tres puissant pour faire jaser deux application sans aucun script.

    il existe les NSPipe pour les flux de donnée  souvent  associé  à  NSTask, mais je pense que tu devrais aller voir un document :

    evoqué par Renaud, les distributed object:

    http://developer.apple.com/documentation/Cocoa/Conceptual/DistrObjects/index.html
  • 14:43 modifié #5
    Avant de continuer, juste une question, tu souhaites faire communiquer deux applications que tu as fais toi-même, ou une que tu as fais et une que tu n'as pas fait.

    Dans le premier, les objets distribués sont une solution. Dans le second si l'appli est pilotable par AppleScript, c'est la solution. L'utilisatation des objets distribués implique en effet que le développeur ait documenté les objets et autres connections qu'il met à  disposition, mais je n'ai jamais vu cela.

    Genose: les NSPipe et NSTask sont utilisés pour lancer des "commandes unix" dans une application, pour les objets distribués on utilise plutot NSDistantObject et NSConnection.
  • Eddy58Eddy58 Membre
    novembre 2005 modifié #6
    Il est aussi possible d'utiliser NSDistributedNotificationCenter, mais là  tout dépend encore du contexte, si ce sont deux applis faites par soi-même, auquel cas ça ne pose aucun problème, ou une appli faites par soi-même et une autre appli, auquel cas il faut connaitre la structure des données émises ou/et reçues par l'autre appli. :)
  • tabliertablier Membre
    14:43 modifié #7
    Merci à  tous pour vos réponses.
    Bonne question: je veux correspondre avec une application créée par un autre et dont je n'ai
    pas les sources (CDFinder). La solution semble donc être l'appel à  CDFinder par un script. J'ai
    déjà  réalisé cela dans mon appli réalisée sous AppleScript Studio (Incremental). Mais pour
    progresser, j'essaie de refaire cette application entièrement en cocoa. Ce qui m'a posé
    problème, c'est justement la manière d'interroger CDF et donc d'appeler un script depuis une méthode en Objective-C. (Faut-il créer un objet spécifique? utiliser un delegate de NSApp?
    Créer un objet NSAppleScript?  Utiliser l'objet AppleScript dans interface builder? Utiliser
    un NSAppleEventDescriptor pour récupérer les réponses?  ..........etc ).
    Je sais, ça fait beaucoup de questions!
      Amicalement.
  • Eddy58Eddy58 Membre
    14:43 modifié #8
    Pour tes questions sur l'AppleScript, tu peux aller ici. :)
Connectez-vous ou Inscrivez-vous pour répondre.