我做了一个简短的AppleScript,发送带附件的电子邮件。现在我想在我的cocoa应用程序中集成这个脚本。我尝试了以下在互联网上找到的代码:
NSAppleScript *mailScript;
NSString *scriptString= [NSString stringWithFormat:@"the applescript"];
mailScript = [[NSAppleScript alloc] initWithSource:scriptString];
[mailScript executeAndReturnError:nil];
[mailScript release];
但是,此代码不起作用。我是可可的完全新手,可以使用一些帮助。
更新: 电子邮件已创建。虽然添加了附件,但AppleScript似乎停止了。当在脚本编辑器中运行时,applescript工作正常。任何线索?
由于
答案 0 :(得分:5)
所以当你不忽略-[NSAppleScript executeAndReturnError:]
的错误时,错误是什么?它的内容是否告诉你什么出了什么问题?
NSDictionary *dict = nil;
if ([mailScript executeAndReturnError: &dict] == nil)
{
//ooh, it went wrong, look at dict
}
else
{
// well, that worked!
}
答案 1 :(得分: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
将向控制台输出描述任何错误的字符串。这可以帮助您找到任何问题。
答案 2 :(得分:1)
如果需要时间到达应用程序中的正确位置并且您只想测试Applescript,可以通过osascript
命令从终端运行它,并查看结果:
osascript -e 'applescript here';
答案 3 :(得分:0)
似乎SBApplication
应该可以使用,但我之前没有使用它。
SBApplication:用于使用Objective-C而不是AppleScript进行跨应用程序脚本调用。例如:获取当前的iTunes曲目。
以下是文档的摘录:
SBApplication类提供了一种机制,使Objective-C程序能够将Apple事件发送到可编写脚本的应用程序并接收Apple事件作为响应。因此,该程序可以控制应用程序并与之交换数据。 Scripting Bridge的工作原理是在Apple事件描述符和Cocoa对象之间桥接数据类型。
虽然SBApplication包含手动发送和处理Apple事件的方法,但您永远不必直接调用这些方法。相反,SBApplication的子类实现了特定于应用程序的方法,可以自动处理Apple事件的发送。
例如,如果你想获得当前的iTunes曲目,你可以简单地使用动态定义的子类的currentTrack方法为iTunes应用程序 - 它处理发送Apple事件的细节 - 而不是找出更复杂,更低级别的选择:
[iTunes propertyWithCode:'pTrk'];
如果您确实需要手动发送Apple事件,请考虑使用NSAppleEventDescriptor类。
希望有所帮助!
答案 4 :(得分:0)
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];
对于“苹果”,你没有写下你想要达到的目标 猜它是为了隐私。