Как извлечь данные AppleScript из NSAppleEventDescriptor в Какао и проанализировать их
То, что я делаю, это выполнение AppleScript внутри Какао. Он возвращает некоторые данные в виде NSAppleEventDescriptor, который NSLog() печатает следующим образом:
<NSAppleEventDescriptor: 'obj '{ 'form':'name', 'want':'dskp', 'seld':'utxt'("69671872"), 'from':'null'() }>
Я хочу взять эти данные и превратить их в NSDictionary или NSArray, или что-то полезное, чтобы я мог извлечь из них вещи (в частности, я после поля, содержащего число "69671872"). Кажется, это какой-то массив, но мои знания об Apple Events довольно ограничены. Есть идеи, как это сделать?
Вот источник, создающий вышеуказанные данные:
NSString *appleScriptSource = [NSString stringWithFormat:@"tell application\"System Events\"\n return desktop 1\n end tell"];
NSDictionary *anError;
NSAppleScript *aScript = [[NSAppleScript alloc] initWithSource:appleScriptSource];
NSAppleEventDescriptor *aDescriptor = [aScript executeAndReturnError:&anError];
NSLog (@"%@", aDescriptor);
[aScript release];
Заранее благодарю за любую помощь!:)
3 ответа
[[aDescriptor descriptorForKeyword:keyAEKeyData] stringValue]
Это запись, а не список. Пытаться descriptorForKeyword:
, передавая константу, соответствующую желаемому четырехзначному коду. (Константы объявлены в заголовках Apple Events.)
Мне не удалось заставить решение Питера Хози работать с моим списком AppleScript, обернутым как NSAppleEventDescriptor. Вместо этого я пришел к следующему решению, которое преобразует список в массив ObjC:
NSAppleEventDescriptor *listDescriptor = [result coerceToDescriptorType:typeAEList];
NSMutableArray *thisArray = [[NSMutableArray alloc] init];
for (NSInteger i = 1; i <= [listDescriptor numberOfItems]; ++i) {
NSAppleEventDescriptor *stringDescriptor = [listDescriptor descriptorAtIndex:i];
[thisArray addObject: stringDescriptor.stringValue];
}
NSLog(@"array result: %@", thisArray);