[AppleScript]Récupérer une valeur

muqaddarmuqaddar Administrateur
13:20 modifié dans Actualités #1
Salut,

Si j'exécute un AppleScript depuis mon appli cocoa (pas forcément depuis une IBAction) mais en l'appelant depuis une fonction void par exemple, ça lance le script, il s'exécute mais comment récupérer dans mon application cocoa la valeur (ou les valeurs) calculées par le script ?

merci.

PS : j'ai même pas encore lancer le script...

Réponses

  • amnesicamnesic Membre
    13:20 modifié #2
    Si tu utilises la classe NSAppleScript c'est très facile de récupérer le résultat via l'objet NSAppleEventDescriptor que te renvoie la méthode executeAndReturnError par exemple ... genre :
    <br />    NSDictionary *errorInfo=0;<br />    NSAppleEventDescriptor *resultScript;<br />    <br />    NSString *theScript = @&quot;return &#092;&quot;hello world&#092;&quot;&quot;;<br />    <br />    NSAppleScript *myAScript = [[NSAppleScript alloc] initWithSource: theScript];<br />    resultScript = [myAScript executeAndReturnError:&amp;errorInfo];<br />    if (resultScript) {<br />        NSLog(@&quot;%@&quot;,[resultScript stringValue]);    <br />    }<br />    [myAScript release];<br />
    
  • muqaddarmuqaddar Administrateur
    13:20 modifié #3
    Merci pour cette belle réponse !
    Oui, j'utilise NSAppleScript.
  • muqaddarmuqaddar Administrateur
    13:20 modifié #4
    Je comprends pas pourquoi tu mets un return dès la string du chemin vers le script NSString *theScript... Du coup il me retourne le nom du fichier ds le NSLog. Les script est inclus ds le bundle du projet.
  • Eddy58Eddy58 Membre
    13:20 modifié #5
    Voici le code que j'utilise pour lancer un AppleScript présent dans les ressources du projet. Ici pour le script "nomDuScript.txt" : :)
    [tt]
        NSAppleScript *monScript;
        NSAppleEventDescriptor *descriptor;
        NSDictionary *erreurInfo;
           
        erreurInfo=[NSDictionary dictionary];
        monScript=NSAppleScript alloc] initWithSource:[NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@&quot;nomDuScript&quot; ofType:@&quot;txt&quot;];
        descriptor=[monScript executeAndReturnError:&erreurInfo];
        [monScript release];
    [/tt]
  • muqaddarmuqaddar Administrateur
    13:20 modifié #6
    merci Eddy, je vais tester ça.
  • muqaddarmuqaddar Administrateur
    13:20 modifié #7
    Bon, ça marche pas.

    Mon script s'éxécute bien ds l'éditeur de scripts, il me renvoie d'ailleurs ma chaine entre guillemets.
    Comme "toto" par exemple.

    J'ai fais un court script ds un fichier test.txt :

    set toto to "prout"
    return toto

    et dans mon appli cocoa :

    [tt]
    NSAppleScript *monScript;
    NSAppleEventDescriptor *resultScript;
    NSDictionary *erreurInfo;

    erreurInfo=[NSDictionary dictionary];
    monScript=NSAppleScript alloc] initWithSource:[NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@&quot;test&quot; ofType:@&quot;txt&quot;];
    resultScript=[monScript executeAndReturnError:&erreurInfo];


    if (resultScript) {
    NSLog(@valeur : %@", [resultScript stringValue]);
    }

    [monScript release];
    [/tt]

    Il me retourne : valeur : (null)
    Je comprends pas.
  • muqaddarmuqaddar Administrateur
    13:20 modifié #8
    J'ai trouvé.

    Le txt n'était pas en UTF... comme quoi, faut pas grand chose.
  • Eddy58Eddy58 Membre
    13:20 modifié #9
    Et si tu fais un NSLog sur ton dictionary erreurInfo ça donne quoi ? ???

    [EDIT] Ha ben c'est plus la peine ! ;D
  • muqaddarmuqaddar Administrateur
    13:20 modifié #10
    Dites, vous savez si le champ return dans un AppleScript est limité en taille ?

    Parce que là  j'ai un petit bug et c'est une piste possible...
  • amnesicamnesic Membre
    13:20 modifié #11
    dans 1109153415:

    Je comprends pas pourquoi tu mets un return dès la string du chemin vers le script NSString *theScript...

    ce n'était pas la string du chemin mais le code AppleScript en lui même ;) ... code qui faisait juste que répondre le célèbre Hello World !
Connectez-vous ou Inscrivez-vous pour répondre.