2011-02-01 47 views
0

我的應用程序有一些基本的applescriptability。有一個方法(receivedInstantMessage)接受一個參數(消息)並將其傳遞給我的應用程序,然後對其進行處理。這個Applescript有什麼問題?

以下AppleScript的:

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重啓固定的東西。很奇怪......

+1

如果你用簡單的東西來替換告訴應用程序「MyApp」語句,比如「顯示對話框theMessage」,你的iChat腳本會發生什麼?顯示它? – Asmus 2011-02-01 01:11:38

回答

1

只是一個語義細節:考慮到scripter發送消息到您的應用程序,沒有收到它們。是的,你的應用程序正在接收它們,但是你選擇「receivedInstantMessage」的術語是從你的應用程序的角度來看的,而不是scripter。

此外,在駱駝案件中有術語被認爲是懸而未決的。 AppleScript術語可以(並且通常應該)包含空格。如果你真的想要做到這一點,你應該把術語分成名詞和動詞。 (其中名詞是正確建模的對象,屬性和動詞是操縱它們的命令。在這種情況下,您可能需要發送消息「bla」,其中消息是具有諸如發件人,收件人,頻道等屬性的對象。 send是一個將消息對象作爲參數的命令 - 檢查Snak的字典是否相當好 - 但不完美 - 執行)。

對不起,如果這聽起來肛門。我一直在applescripting多年,雖然我真的真的很欣賞,當開發人員添加applescript的支持,我知道我代表所有的蘋果手代言人,當我說,構造不好的字典,和糟糕的術語選擇令人沮喪和惱火,特別是作爲應用程序變得更加成熟,開發者開始說「我知道蘋果腳本界面需要徹底改革,但我不想破壞現有的腳本!」。如果腳本接口變得更好,所有的applescripters都會更喜歡它,即使它打破了現有的腳本。所以:現在做錯了,但要做好準備,以後從根本上改善它。 :)

即使蘋果有一些糟糕的術語,例如在iTunes中有一個updatePodcast和updateAllPodcasts命令。這是錯誤的,根據他們自己的technote 2106 - 特別注意命名規則部分。他們應該有一個podcast對象和一個更新命令,這樣你也可以做一些事情,比如「刪除每個podcast的名字包含」Ann (「誰的」子句是appleScript最酷的功能之一!)