Con*_*nor 7 macos cocoa applescript objective-c
我正在寻找一种从Mac App中执行Applescript文件的方法.我已经制作了以前使用过的mac应用程序NSAppleScript *script = [[NSAppleScript alloc] initWithSource: @"MY_CODE"]];,但是我的applecript非常冗长,我希望能够将该文件作为我项目的一部分引用,并在其中输入内容(或直接执行该文件)在我的应用程序内).
谢谢!
foo*_*foo 12
要在沙箱(10.8+)之外运行用户提供的AppleScripts,请使用NSUserAppleScriptTask
要运行应用程序包中嵌入的.scpt文件或10.7或更早版本中的用户提供的脚本,请使用NSAppleScript.
请注意,NSUserAppleScriptTask和NSAppleScript都有点蹩脚.它们都不提供Cocoa和AS类型之间的自动数据转换,这意味着使用NSAppleEventDescriptors进行大量手动操作以传递参数和结果.NSAppleScript实例提供部分持久性支持:脚本的属性在多个处理程序调用中保持状态,但是无法将更改的脚本保存回磁盘,因此一旦取消分配,任何更改都将丢失.NSUSerAppleScriptTask是严格的一次性事件,因此脚本状态在调用之间根本不存在.
要在应用程序包中嵌入AppleScript和ObjC代码之间进行更深入的集成,请使用AppleScriptObjC(10.6+):
ASOC是一个类似于PyObjC或RubyCocoa的双向桥,允许您在脚本对象中编写AppleScript代码,然后在ObjC代码中将其作为常规Cocoa类出现,允许ObjC代码调用AS处理程序和AS代码来调用ObjC方法.常见的ObjC和AS类型(整数,双精度,NSStrings,NSArrays等)在越过桥时会自动换行/转换,因此除了偶尔在AS侧进行投射之外,不需要额外的工作.
ASOC并不完美(Apple自己的文档很糟糕,桥接不是免费的,故障并不是未知),但是对于与ObjC的可编写脚本的应用程序进行交互,它是最好的另类垃圾选择.
为什么不将编译的脚本或脚本文本放入包中,然后使用 NSAppleScript 的initWithContentsOfURL:error: 方法?
例如:
NSError * error = NULL;
NSURL * resourceURL = [[NSBundle mainBundle] resourceURL];
NSURL * urlOfScript = [resourceURL URLByAppendingPathComponent: @"MyApplescript.scpt"];
NSAppleScript *script = [[NSAppleScript alloc] initWithContentsOfURL: urlOfScript error: &error];
if(script == NULL)
{
NSLog( @"could not instantiate script at %@ - %@", [urlOfScript absolutePath], [error localizedDescription] );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3524 次 |
| 最近记录: |