appscript objc-trunk中的文档在“性能问题”一节中随机使用了ruby。
require "appscript"
include Appscript
desiredEmail = 'sam.brown@foo.com'
p app('Address Book').people[
its.emails.value.contains(desiredEmail)
].name.get这将如何在Objective-C中编写?如果这似乎是一个过于基本的问题,我道歉,我没有使用Ruby的经验。
谢谢。
发布于 2010-02-21 09:19:46
如果您运行ruby脚本并使用ASTranslate,它应该会将原始的appscript命令转换为Objc-appscript。
Edit01:
我想它看起来会像这样。我还没有运行工具来生成胶水代码,所以我在猜测应用程序名称的显示方式。
#import "AddressBookGlue.h" //Dont know the precise name
AddressBookApplication *abApp=[[AddressBookApplication alloc] initWithName: @"Address Book.app"];
NSString *desiredEmail=@"sam.brown@foo.com"
NSString *returnedName= [[[[[[abApp people] emails] value] contains:desiredEmail] name] get]; 基本上,它遵循Objectic-c从点语法转换时使用的相同规则:在原始语法中只要有点,Objective-C中就会有一个方括号。
我可能会补充说,如果你要做很多这种类型的脚本,最好花一两天时间学习ruby或python的基础知识。在点语法中使用OSA要比使用嵌套语法容易得多。仅仅是看着Objc-appscript文档中的那些括号就让我热泪盈眶。
发布于 2010-02-26 03:53:58
对objc-appscript手册的不完整表示歉意,该手册最初是从rb-appscript移植而来的。(FWIW,今年春天我应该有一些时间来处理appscript。)
首先将Ruby代码转换回AppleScript可能是最简单的方法:
tell application "Address Book"
get name of every person where value of its email contains "hengist.podd@virgin.net"
end tell通过ASTranslate运行它会得到以下结果:
#import "ABGlue/ABGlue.h"
ABApplication *addressBook = [ABApplication applicationWithName: @"Address Book"];
ABReference *ref = [[[addressBook people] byTest: [[[ABIts emails] value] contains: @"hengist.podd@virgin.net"]] name];
id result = [ref getItem];发布于 2010-02-21 08:56:48
据我所知,这是打印每个电子邮件地址为"sam.brown@foo.com“的人的名字。
在Cocoa中如何做到这一点没有直接的关联。幸运的是,Address Book是可脚本化的,这意味着您可以使用Scripting Bridge framework从Cocoa应用程序与其进行交互。
这个页面对如何简单地通过ScriptingBridge与Mail.app进行交互有一个非常好的解释:http://robnapier.net/blog/scripting-bridge-265
希望这能给你足够的信息,让你朝着正确的方向前进。
https://stackoverflow.com/questions/2304183
复制相似问题