我试图找出QuickTime播放器是暂停还是从Cocoa播放。我在Script Debugger和AppleScript Editor中使用以下小AppleScript,并按预期返回true
或false
:
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];
在单步执行上面的代码后,我的调试控制台如下所示:
如果它是相关的,那么最后一个调试器步骤需要大约四秒钟,一个值分配给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
分配。那么在应用程序项目中可能有什么不同呢?阻止它工作?
答案 0 :(得分:3)
当我在其他事情上工作的同时,当我的思绪在后台工作时,我发现这是一个愚蠢的错误。
沙箱。该应用程序是沙盒,权利使其可以访问iTunes Apple Events,但我没有添加QuickTime Player权利。我构建的测试应用程序没有沙盒,这就是它工作正常的原因。