0

私のアプリには、初歩的なアップルスクリプト機能があります。1 つのパラメーター (メッセージ) を受け取り、それをアプリに渡して処理する 1 つのメソッド (receivedInstantMessage) があります。

次のアップルスクリプト:

tell application "MyApp"
    receivedInstantMessage "This is a message"
end tell

完璧に動作します。私のアプリは、メッセージ (「これはメッセージです」) を含むダイアログを表示します。

IM を 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

メッセージを受信して​​も何も起こりません。メッセージ変数 (theMessage) を iChat から置き換えて、任意の文字列を使用しても、何もしません。

私は何を間違っていますか。私はapplescriptにまったく慣れていません(通常はREALbasicコーダーです)。

[更新]: これは現在動作しているようです。Macを再起動するだけで問題が解決しました。非常に奇妙な...

4

1 に答える 1

1

単なるセマンティックの詳細: スクリプターがメッセージを受信するのではなく、アプリに送信していると考えてください。はい、アプリはそれらを受信して​​いますが、「receivedInstantMessage」という用語は、スクリプターではなくアプリの観点からのものです。

さらに、キャメルケースの用語を使用することは不適切と見なされます。AppleScript の用語には、スペースを含めることができます (多くの場合、そうする必要があります)。そして、本当に適切にやりたいのであれば、用語を名詞と動詞に分けるべきです。(ここで、名詞はプロパティを持つ適切にモデル化されたオブジェクトであり、動詞はそれらを操作するためのコマンドです。この場合、メッセージは送信者、受信者、チャネルなどのプロパティを持つオブジェクトであるメッセージ「bla」を送信するようなものが必要になるでしょう。 send はメッセージ オブジェクトをパラメーターとして受け取るコマンドです。Snak のディクショナリを調べて、非常に優れた (しかし完全ではない) 実装を確認してください)。

これがアナルに聞こえたらごめんなさい。私は長年アップルスクリプティングを行ってきましたが、開発者がアップルスクリプティングのサポートを追加してくれることを本当に感謝していますが、私がすべてのアップルスクリプターを代弁していることは承知しています。成熟すると、開発者は「applescript インターフェイスを完全にオーバーホールする必要があることはわかっていますが、既存のスクリプトを壊したくありません!」などと言い始めます。既存のスクリプトが壊れたとしても、スクリプト インターフェイスが改善されれば、すべての AppleScripter がそれを好みます。だから:今は間違っているが、後で根本的に改善する準備をしてください. :)

Apple でさえお粗末な用語を使用しています。たとえば、iTunes には updatePodcast および updateAllPodcasts コマンドがあります。彼ら自身のテクニカルノート 2106によると、これは単に間違っています - 命名規則に関するセクションに特に注意してください..ポッドキャストオブジェクトと更新コマンドが必要なので、「名前に含まれるすべてのポッドキャストを削除する」 Ann Coulter". ("Whose" 句は、appleScript の最も優れた機能の 1 つです!)

于 2011-05-25T19:49:39.393 に答える