大規模な Cocoa/Objective-C アプリ内から小さな AppleScript ハンドラーを呼び出しています (AppleScript-ObjC フレームワークを使用して、Objective-C コードから直接 AppleScript メソッドを呼び出します)。最初は Scripting Bridge を使ってみましたが、外部アプリとの互換性の問題でうまくいきませんでした。AppleScript の唯一の目的は、本質的に小さな文字列を外部アプリに送信することです。外部アプリケーションを制御するためにこのようなことを試みたのはこれが初めてなので、明らかな間違いを犯している場合はご容赦ください。
外部アプリケーションの状態によっては、AppleScript でエラーが発生することがあります。Objective-C コードでこれらのエラーを適切に処理したいと考えています。
私が現在これを行っている方法は、AppleScript に try ブロックがあることです。
try
-- Do stuff
return the number 0
on error the error_message number the error_number
return the error_number
end try
スクリプトが正常に終了した場合は 0 を返し、そうでない場合はエラー番号を返します。次に、Objective-C コードで戻り値をテストし、エラーが発生した場合に「通常の」例外をスローして、通常の例外処理コードでそれを処理できるようにします。
これは機能しますが、Objective-C コードから直接 AppleScript 例外をトラップする方法はありますか? try-error
XCode でAppleScript コードなしでコードを実行すると、AppleScript から戻る前に例外ブレークポイントにヒットしたように見えますが@catch
、NSException
. 何らかの形でヒットしている例外をキャッチする方法はありますか? 答えはノーだと思いますが、私がやっていることよりも良い方法がないことを確認したかったのです。AppleScript-ObjC に関する Apple のドキュメントはかなりまばらで、ほとんどは AppleScript 内でのエラーの処理について説明しているだけです。
更新: そこで、ブレークポイントの設定を少しいじってみたところ、Objective-C の例外ではなく、AppleScript コードから送信された C++ の例外であることがわかりました。だから@catch
使っていたブロックに引っかからなかった。AppleScript-ObjC メカニズムは制御フロー/回復可能なエラーの例外を使用しているようで、それらがスローされたときにブレークするようにブレークポイントを設定しました。したがって、AppleScript アプリケーションでエラーをキャッチし、エラー コードを文字列または整数として Objective-C コードに返すのがおそらく最善だと思います。