NSAppleScript和无响应的界面 - Objective-C

时间:2012-08-30 10:50:08

标签: objective-c cocoa thread-safety applescript

我想在我的应用程序中运行一些AppleScript代码行。标准方法是使用NSAppleScript类。但是,因为该代码可能需要几分钟才能完成,所以我必须使用单独的线程,否则接口将停止。最大的问题是,正如here所述,NSAppleScript类只能在主线程上运行。

所以,如果我在一个单独的线程上运行代码,我的应用程序崩溃了;如果我在主线程上运行它,它就会停止。有什么想法吗?

另外,我考虑使用NSTask和osascript命令,但我看到某处(找不到链接)osascript不支持用户输入,如对话框和东西。我不确定这是否属实,但如果是,则osascript不是解决方案。

1 个答案:

答案 0 :(得分:0)

所以我最终为此编写了一个帮助器,通过NSTask启动。这是代码,万一有人感兴趣:

对于发射器:

NSArray* args = [NSArray arrayWithObject: <<AS code here>>];

task = [NSTask new];
[task setLaunchPath: [[NSBundle mainBundle] pathForResource: @"ASHelper" ofType: @""]];
[task setArguments: args];
[task launch];

帮助者:

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        NSString* source = [NSString stringWithCString: argv[1] length: strlen(argv[1])];
        NSAppleScript* as = [[NSAppleScript alloc] initWithSource: source];
        [as executeAndReturnError: nil];
    }
    return 0;
}