Вот соответствующий AppleScript, который вы хотите запустить:
property timeScale : 600
set currentPosition to missing value
tell application "QuickTime Player"
set currentPosition to (current time of document 1) / timeScale
end tell
return currentPosition
Если вы с ним не знакомы, property
- это способ указать глобальную переменную в AppleScript. Кроме того, missing value
является AppleScript-эквивалентом nil
в Objective-C. Итак, этот скрипт сначала определяет переменную с именем currentPosition
и устанавливает значение missing value
. Затем он входит в блок tell
, который, в случае успеха, изменит переменную currentPosition
. Затем, вне блока Tell, он возвращает переменную currentPosition
.
В коде Objective-C, когда вы создаете NSAppleScript
с вышеуказанным кодом, его метод -executeAndReturnError:
вернет переменную currentPosition
в NSAppleScriptEventDescriptor
.
-(IBAction)currentPlayTime:(id)sender {
NSDictionary *error = nil;
NSMutableString *scriptText = [NSMutableString stringWithString:@"property timeScale : 600\n"];
[scriptText appendString:@"set currentPosition to missing value\n"];
[scriptText appendString:@"tell application \"QuickTime Player\"\n "];
[scriptText appendString:@"set currentPosition to (current time of document 1) / timeScale\n"];
[scriptText appendString:@"end tell\n"];
[scriptText appendString:@"return currentPosition\n"];
NSAppleScript *script = [[[NSAppleScript alloc] initWithSource:scriptText] autorelease];
NSAppleEventDescriptor *result = [script executeAndReturnError:&error];
NSLog(@"result == %@", result);
DescType descriptorType = [result descriptorType];
NSLog(@"descriptorType == %@", NSFileTypeForHFSTypeCode(descriptorType));
// returns a double
NSData *data = [result data];
double currentPosition = 0;
[data getBytes:¤tPosition length:[data length]];
NSLog(@"currentPosition == %f", currentPosition);
}
Вы можете извлечь содержимое NSAppleEventDescriptor
, как показано выше.
Использование инфраструктуры Scripting Bridge имеет небольшую кривую обучения, но позволит работать с нативными типами, такими как NSNumber
s, вместо того, чтобы идти по более «грязному» пути извлечения сырых байтов из дескриптора AppleEvent. 1025 *