0

我制作了一个简短的applescript,可以发送带有附件的电子邮件。现在我想将此脚本集成到我的可可应用程序中。我尝试了在互联网上找到的以下代码:

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

但是,此代码不起作用。我是可可的新手,需要一些帮助。

更新:电子邮件已创建。但是,当添加附件时,applescript 似乎停止了。在 scripteditor 中运行时,applescript 可以完美运行。有什么线索吗?

谢谢

4

5 回答 5

5

因此,当您不忽略来自 的错误时-[NSAppleScript executeAndReturnError:],错误是什么?它的内容是否告诉您发生了什么问题?

NSDictionary *dict = nil;
if ([mailScript executeAndReturnError: &dict] == nil)
{
  //ooh, it went wrong, look at dict
}
else
{
  // well, that worked!
}
于 2009-06-16T18:56:18.137 回答
1

你的代码看起来不错。AppleScript 中可能存在错误。

尝试以下操作:

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将向控制台输出描述任何错误的字符串。这应该可以帮助您发现任何问题。

于 2009-06-16T18:47:46.310 回答
1

如果需要时间才能到达应用程序中的正确位置并且您只想测试 Applescript,您可以通过osascript命令从终端运行它,并查看结果:

osascript -e 'applescript here';
于 2009-06-16T19:01:14.993 回答
0

它似乎SBApplication应该工作,但我以前没有使用过它。

根据@cocoadevcentral

SBApplication:用于使用 Objective-C 而不是 AppleScript 进行跨应用程序脚本调用。例如:获取当前的 iTunes 曲目。

这是文档的摘录:

SBApplication 类提供了一种机制,使 Objective-C 程序能够将 Apple 事件发送到可编写脚本的应用程序并接收 Apple 事件作为响应。因此,该程序可以控制应用程序并与之交换数据。Scripting Bridge 通过在 Apple 事件描述符和 Cocoa 对象之间桥接数据类型来工作。

尽管 SBApplication 包含手动发送和处理 Apple 事件的方法,但您永远不必直接调用这些方法。相反,SBApplication 的子类实现了自动处理 Apple 事件发送的特定于应用程序的方法。

例如,如果你想获取当前的 iTunes 曲目,你可以简单地使用 iTunes 应用程序动态定义的子类的 currentTrack 方法——它为你处理发送 Apple 事件的细节——而不是计算更复杂的,低级替代方案:

[iTunes propertyWithCode:'pTrk'];

如果您确实需要手动发送 Apple 事件,请考虑使用 NSAppleEventDescriptor 类。

希望有帮助!

于 2009-06-16T19:08:26.073 回答
0

抱歉回复晚了。可可应用程序中的 Applescript 可以通过一些基本原则轻松使用,首先将所有描述符设置为 'NULL',使用 'NSAppleEventDescriptor' 来正确执行脚本,并使用 executionn 的返回值,这将为您的脚本提供:

NSString * scriptString = NULL, NSString * retvalue = NULL;

NSAppleEventDescriptor * descriptor = NULL;

NSDictionary * errInfo = nil;

NSAppleScript * mailScript = NULL;

scriptString = [NSString stringWithFormat: @ "the applescript"];

mailScript = [[NSAppleScript alloc] initWithSource: scriptString];

descriptor = [mailScript executeAndReturnError: & errInfo];

retvalue = [descriptor stringValue];

[mailScript release];   

对于“applescript”,您没有写出您想要实现的目标,我想这是为了隐私。

于 2018-04-16T11:44:27.743 回答