1

cocoaアプリケーションでAppleScriptの定数または変数を事前定義することは可能ですか?言い換えると、関数「addConstantToAppleScript」(次のコードで使用)は定義可能ですか?

addConstantToAppleScript("myText", "Hello!");
char *src = "display dialog myText";
NSString *scriptSource = [NSString stringWithCString:src]; 
NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:scriptSource];
NSDictionary *scriptError = [[NSDictionary alloc] init];
[appleScript executeAndReturnError:scriptError];

ありがとう。

4

1 に答える 1

0

NSDictionary含まれているAppleScriptの先頭にキーと値のペアを追加する場合NSStringは、次の関数のようなものを使用できます。個人的にはNSStringのカテゴリとしてこれを行いますが、関数を要求しました。

NSString *addConstantsToAppleScript(NSString *script, NSDictionary *constants) {
    NSMutableString *constantsScript = [NSMutableString string];

    for(NSString *name in constants) {
        [constantsScript appendFormat:@"set %@ to \"%@\"\n", name, [constants objectForKey:name]];
    }   

    return [NSString stringWithFormat:@"%@%@", constantsScript, script];
}

この関数は、キーと値のペアを形式のAppleScriptステートメントに変換しますset <key> to "<value>"。これらのステートメントは、指定されたscript文字列の前に追加されます。結果のスクリプト文字列が返されます。

上記の関数は次のように使用します。

// Create a dictionary with two entries:
//     myText = Hello\rWorld!
//     Foo    = Bar
NSDictionary *constants = [[NSDictionary alloc ] initWithObjectsAndKeys:@"Hello\rWorld!", @"myText", @"Bar", @"Foo", nil];

// The AppleScript to have the constants prepended to   
NSString *script = @"tell application \"Finder\" to display dialog myText";

// Add the constants to the beginning of the script 
NSString *sourceScript = addConstantsToAppleScript(script, constants);

// sourceScript now equals
//     set Foo to "Bar"
//     set myText to "Hello\rWorld!"
//     tell application "Finder" to display dialog myText

NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:sourceScript];
于 2012-05-02T08:34:17.660 に答える