Fonctions Applescript-ObjC

Maxmad68

Membre actif
27 Octobre 2014
313
17
Strasbourg
github.com
Bonjour,
J'utilise régulièrement Applescript avec Obj-C pour réaliser des petits programmes.
Mais je galère pour les fonctions; quand un script appelle une fonction sur un autre script avec des paramètres, il y a une erreur du type :
'Impossible de convertir «class ocid» id «data optr0000000080F70A0080600000»'

En cherchant sur internet, je tombe sur des articles qui disent qu'il faut penser à convertir les paramètres dans le bon types, mais même en le faisant, l'erreur se reproduit...
Aidez moi svp
 
Bonjour,

Généralement, il faut convertir les (NSObject de l'objective-C qui sont des «class ocid» ) en classe de l'AppleScript
Exemples :
Bloc de code:
set mylist to (x) as list -- x is a NSarray object
set mystring to (x) as string -- x is a NSString object
set myinteger to (x) as integer -- x is a NSNumber object
set mynumber to (x) as real -- x is a NSNumber object
set myrecord to (x) as record -- x is a NSDictionary object

-----------
Pour les autres classes (comme NSDate, NSData, NSError, NSSize, NSRect, etc...), il faut utiliser une méthode de l'objective-C pour le convertir avant.

-----------
Cela peut-être aussi un problème de terminologie entre l'AppleScript et Objective-C
Exemple avec URL qui est un terme de l'applescript et un terme de l'objective-C :
Bloc de code:
OBjCMethode's URL() -- syntaxe incorrecte
OBjCMethode's |URL|()-- utilise cette syntaxe

----------
Cela peut-être aussi une erreur de syntaxe pour une méthode de l'Objective-C
Exemple :
Bloc de code:
tell current application's class "NSURL" to set aURL to its URLWithString:"http://www.apple.com"
set anEvent's |URL|() to aURL --> Error: Can’t set «class ocid» id «data optr0000000000C8660080600000» to «class ocid» id «data optr000000004082460000600000». (error -10006)
anEvent's setURL:aURL -- syntaxe correcte-->

Pour une réponse plus précise, mets quelques lignes du script dans ton message.
 
C'est du type string, mais même en le convertissant comme dans la première méthode, ça ne marche pas.
Voici une partie de code résumant ce que je fais et les erreurs qui en suivent:

Bloc de code:
property deuxiemeScript : class "deuxiemeScript"
script premierScript

on fonction:sender
set fichier to "ordi:Users:monnom:dossier:fichier.txt"

try
set resultat to read fichier
on error
deuxiemeScript's trouverErreur_(fichier)
end try

end fonction

end script

Dans un autre fichier (.applescript):
Bloc de code:
property premierScript : class "premierScript"
script deuxiemeScript

on trouverErreur_(fichier)
display alert fichier
end trouverErreur_

end script
J'ai beau tout essayer, il me retourne l'erreur
Impossible de convertir «class ocid» id «data optr00000000E0822A0080600000» en type string. (error -1700)
 
Bonjour,

C'est plus simple en utilisant une autre variable, sinon il faut mettre fichier as string entre les parenthèses.
Comme ceci.
Bloc de code:
    on trouverErreur_(fichier)
        set f to fichier as string
        display alert f
        -- ou --> display alert (fichier as string)
    end trouverErreur_