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