2009-06-16 7 views
0

J'ai fait une petite applescript qui envoie un email avec pièce jointe. Maintenant, je veux intégrer ce script dans mon application de cacao. J'ai essayé le code suivant que j'ai trouvé sur Internet:intégrant applescript dans le cacao

NSAppleScript *mailScript; 
NSString *scriptString= [NSString stringWithFormat:@"the applescript"]; 
mailScript = [[NSAppleScript alloc] initWithSource:scriptString]; 
[mailScript executeAndReturnError:nil]; 
[mailScript release]; 

Ce code ne fonctionne cependant pas. Je suis un débutant complet au cacao et pourrait utiliser de l'aide.

MISE À JOUR: L'e-mail est créé. L'applescript semble s'arrêter lorsque la pièce jointe est ajoutée. L'applescript fonctionne parfaitement lorsqu'il est exécuté dans scripteditor. Une idée?

Merci

+1

FYI: Adium avait des problèmes avec la fuite de mémoire NSAppleScript. Vous pouvez essayer OSAScript à partir du framework OSAKit. Le framework est livré avec Mac OS X, et l'API est presque exactement la même. –

Répondre

1

Votre code semble correct. Il est probable qu'il y ait une erreur dans votre AppleScript.

les opérations suivantes:

NSAppleScript *mailScript; 
NSAppleEventDescriptor *resultDescriptor; 
NSString *scriptString= [NSString stringWithFormat:@"the applescript"]; 
mailScript = [[NSAppleScript alloc] initWithSource:scriptString]; 
resultDescriptor = [mailScript executeAndReturnError:nil]; 
NSLog([resultDescriptor stringValue]); 
[mailScript release]; 

NSLog Affichera une chaîne décrivant des erreurs à la console. Cela devrait vous aider à trouver des problèmes.

+1

- [NSAppleScript executeAndReturnError:] est documenté pour renvoyer zéro si une erreur se produit. –

+0

Bon point ... c'est ce que je reçois pour ne pas penser. ;) Votre réponse ressemble plus à ce que j'aurais dû dire, donc +1. – Naaff

5

Donc, quand vous n'ignorez pas l'erreur de -[NSAppleScript executeAndReturnError:], quelle est l'erreur? Est-ce que son contenu vous dit quelque chose sur ce qui s'est mal passé?

NSDictionary *dict = nil; 
if ([mailScript executeAndReturnError: &dict] == nil) 
{ 
    //ooh, it went wrong, look at dict 
} 
else 
{ 
    // well, that worked! 
} 
1

S'il faut du temps pour arriver au bon endroit dans votre application et que vous voulez juste tester l'AppleScript, vous pouvez l'exécuter à partir du terminal via la commande osascript, et voir les résultats:

osascript -e 'applescript here'; 
0

Il semble que SBApplication devrait fonctionner, mais je ne l'ai pas utilisé auparavant.

Selon @cocoadevcentral:

SBApplication: use to make cross-application scripting calls with Objective-C instead of AppleScript. Ex: get current iTunes track.

Voici est l'extrait de la documentation:

The SBApplication class provides a mechanism enabling an Objective-C program to send Apple events to a scriptable application and receive Apple events in response. It thereby makes it possible for that program to control the application and exchange data with it. Scripting Bridge works by bridging data types between Apple event descriptors and Cocoa objects.

Although SBApplication includes methods that manually send and process Apple events, you should never have to call these methods directly. Instead, subclasses of SBApplication implement application-specific methods that handle the sending of Apple events automatically.

For example, if you wanted to get the current iTunes track, you can simply use the currentTrack method of the dynamically defined subclass for the iTunes application—which handles the details of sending the Apple event for you—rather than figuring out the more complicated, low-level alternative:

[iTunes propertyWithCode:'pTrk']; 

If you do need to send Apple events manually, consider using the NSAppleEventDescriptor class.

Hope that helps!