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

因此,如果我在单独的线程上运行代码,则我的应用程序将崩溃;如果我在主线程上运行它,它将停止。有任何想法吗?

此外,我考虑过使用NSTask和osascript命令,但是我发现某个地方(找不到链接)osascript不支持用户输入,例如对话框和其他内容。我不确定这是否是正确的,但是如果是,那么osascript不是解决方案。

最佳答案

因此,我最终为此编写了一个通过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;
}

关于objective-c - NSAppleScript和无响应的界面-Objective-C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12195203/

10-13 23:58