0

添付ファイル付きの電子メールを送信する短いアップルスクリプトを作成しました。ここで、このスクリプトを自分のココア アプリケーションに統合したいと考えています。インターネットで見つけた次のコードを試しました。

NSAppleScript *mailScript;
NSString *scriptString= [NSString stringWithFormat:@"the applescript"];
mailScript = [[NSAppleScript alloc] initWithSource:scriptString];
[mailScript executeAndReturnError:nil];
[mailScript release];

ただし、このコードは機能しません。私はココアの完全な初心者であり、いくつかの助けを借りることができます.

更新: メールが作成されます。ただし、添付ファイルが追加されると、applescript は停止するようです。applescript は、scripteditor で実行すると完全に機能します。どんな手掛かり?

ありがとう

4

5 に答える 5

5

では、からのエラーを無視しない場合、エラーは-[NSAppleScript executeAndReturnError:]何ですか?その内容は何が悪かったのかを教えてくれますか?

NSDictionary *dict = nil;
if ([mailScript executeAndReturnError: &dict] == nil)
{
  //ooh, it went wrong, look at dict
}
else
{
  // well, that worked!
}
于 2009-06-16T18:56:18.137 に答える
1

コードは問題ないようです。AppleScriptにエラーがある可能性があります。

次のことを試してください。

NSAppleScript *mailScript;
NSAppleEventDescriptor *resultDescriptor;
NSString *scriptString= [NSString stringWithFormat:@"the applescript"];
mailScript = [[NSAppleScript alloc] initWithSource:scriptString];
resultDescriptor = [mailScript executeAndReturnError:nil];
NSLog([resultDescriptor stringValue]);
[mailScript release];

NSLogエラーを説明する文字列をコンソールに出力します。これは、問題を見つけるのに役立つはずです。

于 2009-06-16T18:47:46.310 に答える
1

アプリケーションの適切な場所に到達するのに時間がかかり、Applescriptをテストしたいだけの場合は、osascriptコマンドを使用してターミナルから実行し、結果を確認できます。

osascript -e 'applescript here';
于 2009-06-16T19:01:14.993 に答える
0

うまくいくようですSBApplicationが、私は以前に使用したことがありません。

@cocoadevcentralによると:

SBApplication: AppleScript の代わりに Objective-C を使用してクロスアプリケーション スクリプト呼び出しを行うために使用します。例: 現在の iTunes トラックを取得します。

ドキュメントからの抜粋は次のとおりです。

SBApplication クラスは、Objective-C プログラムが Apple イベントをスクリプト可能なアプリケーションに送信し、それに応じて Apple イベントを受信できるようにするメカニズムを提供します。これにより、そのプログラムがアプリケーションを制御し、データを交換できるようになります。Scripting Bridge は、Apple イベント記述子と Cocoa オブジェクトの間でデータ型を橋渡しすることによって機能します。

SBApplication には Apple イベントを手動で送信および処理するメソッドが含まれていますが、これらのメソッドを直接呼び出す必要はありません。代わりに、SBApplication のサブクラスは、Apple イベントの送信を自動的に処理するアプリケーション固有のメソッドを実装します。

たとえば、現在の iTunes トラックを取得したい場合は、iTunes アプリケーション用に動的に定義されたサブクラスの currentTrack メソッドを使用するだけで済みます。このメソッドは、Apple イベントの送信の詳細を処理します。より複雑なことを理解する必要はありません。低レベルの代替:

[iTunes propertyWithCode:'pTrk'];

Apple イベントを手動で送信する必要がある場合は、NSAppleEventDescriptor クラスの使用を検討してください。

それが役立つことを願っています!

于 2009-06-16T19:08:26.073 に答える