- [NSAppleScript executeAndReturnError:]在AppleScript编辑器中使用的脚本出错

时间:2014-05-17 17:15:54

标签: cocoa applescript nsapplescript nsappleeventdescriptor

我试图找出QuickTime播放器是暂停还是从Cocoa播放。我在Script Debugger和AppleScript Editor中使用以下小AppleScript,并按预期返回truefalse

tell application "QuickTime Player" to tell document 1 to return playing

但是,Cocoa应用程序中的以下代码片段不起作用:

NSString *source = @"tell application \"QuickTime Player\" to tell document 1 to return playing";
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source];
NSDictionary *dict = nil;
NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&dict];

在单步执行上面的代码后,我的调试控制台如下所示:

debug console state

如果它是相关的,那么最后一个调试器步骤需要大约四秒钟,一个值分配给descriptor来执行,这对我来说似乎很长。

我在@autorelease块中构建了一个简单的命令行工具应用程序,它可以工作:

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSString *source = @"tell application \"QuickTime Player\" to tell document 1 to get playing";
        NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source];
        NSDictionary *dict = nil;
        NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&dict];

        NSLog(@"%@", descriptor);
        NSLog(@"%@", dict);
    }
    return 0;
}

它的输出(当QuickTime Player运行时)是:

2014-05-17 11:48:07.255 Sandbox[52872:303] <NSAppleEventDescriptor: 'true'("true")>
2014-05-17 11:48:07.256 Sandbox[52872:303] (null)
Program ended with exit code: 0

单步调试器中的沙箱代码会在不到一秒的时间内执行descriptor分配。那么在应用程序项目中可能有什么不同呢?阻止它工作?

1 个答案:

答案 0 :(得分:3)

当我在其他事情上工作的同时,当我的思绪在后台工作时,我发现这是一个愚蠢的错误。

沙箱。该应用程序是沙盒,权利使其可以访问iTunes Apple Events,但我没有添加QuickTime Player权利。我构建的测试应用程序没有沙盒,这就是它工作正常的原因。