繁体   English   中英

使用嵌入在Cocoa App中的AppleScript-ObjC处理错误的最佳方法?

[英]Best Way to Handle Errors with AppleScript-ObjC embedded in Cocoa App?

我正在一个更大的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异常? 当我在XCode中运行没有AppleScript try-error代码的代码时,它似乎在从AppleScript返回之前到达我的异常断点,但它从不为NSException调用@catch块。 是否有某种方法可以捕获正在以某种方式被击中的异常? 我猜测答案是否定的,但我想确定没有比我正在做的更好的方法。 关于AppleScript-ObjC的Apple文档相当稀疏,大多只讨论AppleScript中的处理错误。

更新:所以,我只是尝试了一下断点设置,结果发现它是从AppleScript代码发送的C ++异常,而不是Objective-C发送的。 这就是为什么它没有被我正在使用的@catch块捕获。 AppleScript-ObjC机制似乎使用了控制流/可恢复错误的异常,并且我将断点设置为在它们被抛出时中断。 因此,我认为最好只捕获AppleScript应用程序中的错误,并将错误代码作为字符串或整数返回到Objective-C代码。

AppleScript使用C ++异常来实现自己的异常,但没有别的; 您不应该在成功完成的代码中看到它们。 如果AppleScript异常逃脱到返回Objective-C的程度,那么桥实际上会吞下它 - 你应该得到一条日志消息,以及来自桥接方法的nil / zero / NO返回值。 所有这一切的结果是你已经做了正确的事情:在AppleScript中捕获错误并返回Objective-C代码可以检测到的内容。

另外,AppleScriptObjC主要面向开发人员主要或完全用AppleScript编写应用程序。 如果您正在编写一个主要的Objective-C应用程序,其中包含一些通过脚本控制其他应用程序的位,请考虑使用ScriptingBridge。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM