0

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 の経験はありません。

ありがとう。

4

3 に答える 3

1

rb-appscript から移植された objc-appscript のマニュアルが不完全であることをお詫びします。(FWIW、私はこの春にアプリスクリプトに取り組む時間が必要です。)

最初に 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-25T19:53:57.717 に答える
1

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 がドット構文から変換するときに使用するのと同じ規則に従います。元の構文にドットがある場合は、Objectic-C のブラケットを想定してください。

このタイプのスクリプトを大量に作成する予定がある場合は、1 日か 2 日かけて Ruby または Python の基本を学習するのが最善であると付け加えておきます。ネストされた構文よりも、ドット構文で OSA を操作する方がはるかに簡単です。Objc-appscript のドキュメントにあるこれらすべてのブラケットを見るだけで、涙が出てきます。

于 2010-02-21T01:19:45.900 に答える
0

私が理解していることから、それは「sam.brown@foo.com」の電子メールを持っているすべての人の名前を印刷しています。

Cocoa でこれを行う方法に直接的な相関関係はありません。幸いなことに、Address Book はスクリプト可能です。つまり、Scripting Bridge フレームワークを使用して、Cocoa アプリから Address Book を操作できます。

このページには、ScriptingBridge を介して Mail.app と簡単に対話する方法について、非常に優れた説明があります: http://robnapier.net/blog/scripting-bridge-265

うまくいけば、正しい方向に進むための十分な情報が得られるはずです.

于 2010-02-21T00:56:47.507 に答える