超时对NSAppleScript没有影响

时间:2014-04-08 09:06:02

标签: objective-c cocoa applescript applescript-objc

我有一个简单的苹果脚本如下:

tell application id "com.adobe.InDesign"
    set sel to selection
end tell

此脚本执行正常,但当InDesign显示保存确认对话框时,如果我执行脚本,则等待2分钟(默认苹果脚本超时)。

enter image description here
保存确认对话框

因此我指定超时如下:

tell application id "com.adobe.InDesign"
    with timeout of 0.2 seconds
        set sel to selection
    end timeout
end tell

现在,如果我在 AppleScript编辑器中执行上述脚本,那么每件事都符合我的预期:

enter image description here

但是当我通过 NSAppleScript 以编程方式执行相同的脚本时,超时没有效果,程序等待2分钟:

NSDictionary *errorDict;
NSString *script = 
    @"tell application id \"com.adobe.InDesign\"\n"
    @"  with timeout of 0.2 second\n"
    @"      set sel to selection\n"
    @"  end timeout\n"
    @"end tell\n"
    ;    
NSAppleScript* scr = [[NSAppleScript alloc] initWithSource: script];
[scr executeAndReturnError: &errorDict];

附加说明:
当我的可可代码正在执行时(当我的应用程序被阻止时)如果我在 AppleScript编辑器中执行相同的脚本,那么我的可可代码会在超时2分钟之前解锁。似乎我的应用程序在Apple脚本超时行之前被阻止[?]
如何执行与 AppleScript编辑器相同的苹果脚本? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

构建脚本并另存为应用程序应解决此问题。它应该是相同的脚本,但只需在脚本的开头和结尾添加on runend run。这样做的方法是当你去保存时,在保存菜单的底部,应该有一个文件格式下拉列表。选择“应用程序”选项并保存。

我注意到这会使“默认的Applescript超时”无效。