Applescript 什么';这本苹果书怎么了?

Applescript 什么';这本苹果书怎么了?,applescript,realbasic,ichat,Applescript,Realbasic,Ichat,我的应用程序有一些基本的应用程序描述功能。有一个方法(receivedInstantMessage)接受单个参数(消息)并将其传递给我的应用程序,然后由应用程序处理 以下应用程序脚本: tell application "MyApp" receivedInstantMessage "This is a message" end tell 工作完美。我的应用程序显示一个包含消息的对话框(“这是一条消息”) 我正在尝试设置它,这样当我向iChat发送即时消息时,它会运行一个applescr

我的应用程序有一些基本的应用程序描述功能。有一个方法(receivedInstantMessage)接受单个参数(消息)并将其传递给我的应用程序,然后由应用程序处理

以下应用程序脚本:

tell application "MyApp"
    receivedInstantMessage "This is a message"
end tell
工作完美。我的应用程序显示一个包含消息的对话框(“这是一条消息”)

我正在尝试设置它,这样当我向iChat发送即时消息时,它会运行一个applescript,将消息内容发送到我的应用程序。我已经告诉iChat在收到消息时运行一个脚本,我知道该部分正在工作。我现在使用的脚本不起作用:

using terms from application "iChat"
    on message received theMessage from theBuddy for theChat
        tell application "MyApp"
            receivedInstantMessage theMessage                
        end tell
    end message received
end using terms from
当我收到消息时,什么也没有发生。即使我从iChat替换消息变量(theMessage)并使用任意字符串,它仍然不起任何作用

我做错了什么。我对applescript很陌生(通常是一名REALbasic程序员)


[更新]:这似乎现在起作用了。一个简单的重启Mac就可以解决问题。非常奇怪…

只是一个语义细节:考虑脚本正在向应用程序发送消息,而不是接收它们。是的,您的应用程序正在接收它们,但您选择的术语“receivedInstantMessage”是从应用程序的角度出发的,而不是从脚本编写者的角度出发的

此外,naff被认为在camel案例中有术语。AppleScript术语可以(而且通常应该)包含空格。如果你真的想把它做好,你应该把术语分成名词和动词。(其中名词是正确建模的对象,带有属性,动词是用于操作它们的命令。在这种情况下,您可能需要类似于发送消息“bla”的命令。),其中消息是一个具有发送者、接收者、通道等属性的对象,而send是一个将消息对象作为参数的命令(请查看Snak字典,以获得一个非常好但并不完美的实现)

对不起,如果这听起来像肛门。我从事applescripting已有多年,虽然我非常感谢开发人员添加applescript支持,但我知道我代表所有AppleScripter说,糟糕的词典构造和糟糕的术语选择令人沮丧和恼火,尤其是当应用程序越来越成熟,开发人员开始说“我知道applescript界面需要彻底检修,但我不想破坏现有脚本!”。如果脚本接口变得更好,即使它破坏了现有的脚本,所有applescripter都会喜欢它。所以:现在就做错事,但要准备好以后从根本上改进它。:)


甚至苹果也有一些糟糕的术语,例如在iTunes中有一个updatePodcast和UpdateAllPodcast命令。根据他们自己的说法,这是错误的——请特别注意命名规则部分。。它们应该有一个podcast对象和一个update命令,这样您还可以执行诸如“删除每个名称中包含“Ann Coulter”的podcast”(“其”子句是appleScript最酷的功能之一!)

如果您将tell app“MyApp”语句替换为更简单的语句,例如显示对话框消息“”?它显示了吗?非常奇怪。现在一切正常-重新启动就解决了。