5

我正在做的是在 Cocoa 中执行 AppleScript。它返回一些数据作为NSAppleEventDescriptor, NSLog() 打印如下:

<NSAppleEventDescriptor: 'obj '{ 'form':'name', 'want':'dskp', 'seld':'utxt'("69671872"), 'from':'null'() }>

我想获取该数据并将其转换为NSDictionaryNSArray或有用的东西,以便我可以从中提取内容(特别是我在持有“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];

提前感谢您的帮助!:)

4

3 回答 3

3

那是记录,不是列表。尝试descriptorForKeyword:,传递与您想要的四字符代码匹配的常量。(常量在 Apple 事件标头中声明。)

于 2009-08-07T23:51:22.550 回答
2
[[aDescriptor descriptorForKeyword:keyAEKeyData] stringValue]
于 2009-08-07T23:50:01.883 回答
0

我无法让 Peter Hosey 的解决方案在包装为 NSAppleEventDescriptor 的 AppleScript 列表上工作。相反,我遇到了以下将列表强制为 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);
于 2021-05-30T01:11:32.507 回答