2

アプリケーション内から数行の AppleScript コードを実行したいと考えています。標準的な方法は、NSAppleScript クラスを使用することです。ただし、そのコードが完了するまでに数分かかる場合があるため、別のスレッドを使用する必要があります。そうしないと、インターフェイスが停止します。大きな問題は、ここにあるように、NSAppleScript クラスはメイン スレッドでしか実行できないことです。

そのため、別のスレッドでコードを実行すると、アプリがクラッシュします。メインスレッドで実行すると停止します。何か案は?

また、NSTask と osascript コマンドの使用を検討しましたが、osascript がダイアログ ボックスなどのユーザー入力をサポートしていない場所 (リンクが見つからない) を見ました。それが本当かどうかはわかりませんが、そうである場合、osascript は解決策ではありません。

4

1 に答える 1

1

そのため、NSTask を介して起動されるヘルパーを作成することになりました。誰かが興味を持っている場合に備えて、コードは次のとおりです。

ランチャーの場合:

NSArray* args = [NSArray arrayWithObject: <<AS code here>>];

task = [NSTask new];
[task setLaunchPath: [[NSBundle mainBundle] pathForResource: @"ASHelper" ofType: @""]];
[task setArguments: args];
[task launch];

そしてヘルパー:

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        NSString* source = [NSString stringWithCString: argv[1] length: strlen(argv[1])];
        NSAppleScript* as = [[NSAppleScript alloc] initWithSource: source];
        [as executeAndReturnError: nil];
    }
    return 0;
}
于 2012-09-16T17:09:22.397 に答える