将OS X Cocoa App中的变量或字符串传递给Applescript

时间:2013-05-13 19:37:05

标签: macos cocoa xcode4 applescript applescript-objc

我想将变量传递给applescript。 例如,我在Cocoa-App(不是cocoa-applescript应用程序)的文本字段中键入一些单词。然后,它将是Applescript中的变量以供将来使用。我使用Applescript告诉某些软件运行一些文件。

我在这里试过了How Can I Pass a String From Applescript to Objective C这个方法。它可以使用 initialwithSource 在applescript中添加第一行。我要写一个长句。此外,如果我已经有了AppleScript,我必须将它们组合在一起。或者我必须在Cocoa中编写所有脚本,如下所示。     它毫无意义,有时效果不佳。

NSString *SlideURL = [NSString stringWithFormat:@"set mypath to \"%@\" \n tell application \"Keynote\" \n open mypath \n tell slideshow %@ \n start slideshow\n end tell \n end tell\n",temp,temp];

// here is meaningless right
// temp is the variable I want to pass to applescript 

NSDictionary *errorInfo = nil;
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:SlideURL];
[script executeAndReturnError:&errorInfo];
[script release];

你们中有谁知道更好的方法吗?

谢谢

1 个答案:

答案 0 :(得分:2)

字符串混搭是邪恶的。只需使用AppleScriptObjC;它没有任何魔力或复杂性。

假设您的应用程序是使用Cocoa Application模板构建的,您需要1.在项目中包含AppleScriptObjC框架,然后2.修改其main.m以匹配ASOC模板的main.m,其中包含两个额外的行:

#import <Cocoa/Cocoa.h>

#import <AppleScriptObjC/AppleScriptObjC.h>

int main(int argc, char *argv[])
{
    [[NSBundle mainBundle] loadAppleScriptObjectiveCScripts];
    return NSApplicationMain(argc, (const char **)argv);
}

完成后,您可以将ASOC风格的脚本对象文件添加到项目中,它们看起来就像ObjC程序其余部分的本机类一样,例如:

-- FooTest.applescript

script FOOTest
    property parent : class "NSObject"

    on doSomething_(sender)
        display dialog "Hello World"
    end 

end script

有关有用的链接,请参阅this answer