我想从我的应用程序中运行一些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/