1

NSAppleScript の executeAndReturnError メソッドを使用して、objective-c アプリケーションから AppleScript を実行します。これは、スクリプトの結果を含む NSAppleEventDescriptor オブジェクトを返します。私のスクリプトは、applescript レコードを返します。Objective-C のレコードをどのように解釈しますか? たとえば、返されたスクリプト レコードが { name:"Jakob", phone:"12345678" } の場合、name プロパティで文字列 "Jakob" を取得するにはどうすればよいですか?

4

1 に答える 1

2

レコードを辞書に変換するメソッドを次に示します。私はこれを試していませんが、うまくいくはずです。

また、「名前」キーはAppleScriptにとって他の意味を持つため、AppleScriptで使用するのに適したキーではありません。レコードでそれを使用する際に問題が発生することがよくありました。「theName」のように変更するか、バー |name| で使用することをお勧めします。

-(NSDictionary*)recordToDictionary:(NSAppleEventDescriptor*)theDescriptor {
    NSUInteger j,count;
    id thisDescriptor = [theDescriptor descriptorAtIndex:1];
    count = [thisDescriptor numberOfItems];
    NSMutableDictionary* thisDictionary = [NSMutableDictionary dictionaryWithCapacity:count/2];
    for (j=0; j<count; j=j+2) {
        NSString* theKey = [[thisDescriptor descriptorAtIndex:(j+1)] stringValue];
        NSString* theVal = [[thisDescriptor descriptorAtIndex:(j+2)] stringValue];
        [thisDictionary addEntriesFromDictionary:[NSDictionary dictionaryWithObject:theVal forKey:theKey]];
    }
    return (NSDictionary*)[[thisDictionary retain] autorelease];
}

もちろん、レコードがディクショナリ形式になった後は、ディクショナリで「valueForKey:」インスタンス メソッドを使用して「Jacob」を取得できます。

于 2012-11-01T18:07:36.730 に答える