Я пытаюсь выяснить, приостановлен ли проигрыватель QuickTime или он играет из Какао. Я использую следующий небольшой AppleScript в отладчике сценариев и редакторе AppleScript, и он возвращает true
или false
, как и ожидалось:
tell application "QuickTime Player" to tell document 1 to return playing
Однако следующий фрагмент кода в приложении Какао не работает:
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
присваивание менее чем за секунду. Так что же может отличаться в проекте приложения, что мешает этому работать?