我正在从一个较大的 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
如果脚本正常完成,我返回零,如果没有,则返回错误号。然后在 Objective-C 代码中,我测试返回值并在出现错误的情况下抛出一个“正常”异常,这样我就可以在我的常规异常处理代码中处理它。
这可行,但是有没有办法直接从 Objective-C 代码中捕获 AppleScript 异常?当我try-error
在 XCode 中运行没有 AppleScript 代码的代码时,它似乎在从 AppleScript 返回之前命中了我的异常断点,但它从不@catch
调用NSException
. 有什么方法可以捕获以某种方式被击中的异常吗?我猜答案是否定的,但我想检查是否没有比我正在做的更好的方法来做到这一点。Apple 关于 AppleScript-ObjC 的文档相当稀少,而且大多只是讨论处理 AppleScript 中的错误。
更新:所以,我只是尝试了一点断点设置,结果发现这是从 AppleScript 代码发送的 C++ 异常,而不是 Objective-C 异常。这就是为什么它没有被@catch
我正在使用的块捕获。AppleScript-ObjC 机制似乎对控制流/可恢复错误使用异常,并且我将断点设置为在它们被抛出时中断。因此,我认为最好只捕获 AppleScript 应用程序中的错误,并将错误代码作为字符串或整数返回到 Objective-C 代码。