5

私がやっていることは、Cocoa内でAppleScriptを実行することです。一部のデータをNSAppleEventDescriptorとして返し、NSLog()は次のように出力します。

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

そのデータを取得して、 NSDictionaryまたはNSArray 、あるいはそれからデータを抽出できるようにするための便利なものに変換したいと思います(具体的には、「69671872」番号を保持するフィールドの後にあります)。それはある種の配列のように見えますが、AppleEventsに関する私の知識はかなり限られています。これを行う方法について何かアイデアはありますか?

上記のデータを作成するソースは次のとおりです。

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:必要な4文字のコードに一致する定数を渡してみてください。(定数はApple Eventsヘッダーで宣言されています。)

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

PeterHoseyのソリューションを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 に答える