2012-06-13 6 views
7

私は私の最後のアクティブなアプリへのためのコピー/貼り付けを実行しようとしています、ここに私のコードは次のとおりです。のAppleScriptは、「行の終わりを期待しますが、 U201c 見つかった」 U201dを言う」

NSString *appleScriptSource = [NSString stringWithFormat:@"\ntell application \"%@\" to activate\ntell application \"System Events\" to tell process \"%@\"\nkeystroke \"v\" using command down\nend tell", [lastApp localizedName], [lastApp localizedName]]; 

NSDictionary *error; 
NSAppleScript *aScript = [[NSAppleScript alloc] initWithSource:appleScriptSource]; 
NSAppleEventDescriptor *aDescriptor = [aScript executeAndReturnError:&error]; 

問題は、一部のコンピュータで、それがうまく動作しますが、他人にそれが失敗したということですexecuteAndReturnErrorによって返されるエラーからの私のエラー出力は次のようになります。

2012-06-13 17:43:19.875 Mini Translator[1206:303] (null) (error: { 
    NSAppleScriptErrorBriefMessage = "Expected end of line but found \U201c\"\U201d."; 
    NSAppleScriptErrorMessage = "Expected end of line but found \U201c\"\U201d."; 
    NSAppleScriptErrorNumber = "-2741"; 
    NSAppleScriptErrorRange = "NSRange: {95, 1}"; 
}) 

私はそれが何を意味するのかを把握することができないようなぜ起こるのか?

生成されたappleスクリプトコードをApple Scriptエディタにコピーしようとしましたが、ここでうまくいきます。

私のアプリケーションはサンドボックスです - 私がサポートしたいアプリケーションのキー "com.apple.security.temporary-exception.apple-events"のバンドル識別子を追加しました。

提案がありますか?

+0

\ U201cと\ u201dは、それぞれ引用符(それぞれ左/右)を表します。 [キーボードで引用符を打つ](http://en.wikipedia.org/wiki/%22#Typing_quotation_marks_on_a_computer_keyboard)それで、引用符を正しくエスケープしていないと私は信じています。 – erran

+0

私はユニコードを翻訳しましたが、何がうまくいかないのか分かりません。リンゴスクリプトで試してみましたが、うまくいきませんでした。 –

+0

「このアプリをアクティブにする」のようなシンプルなリンスクリプトでも、同じエラーが発生します。 –

答えて

5

\ u201cと\ u201dは赤い文字列で、リンゴスクリプトで生成されたエラーメッセージの二重引用符を囲むように見えます。問題は、書式設定中の最後のアプリケーションのローカライズされた名前ですスクリプトに挿入します。私はなぜあなたがこのマシンを他のマシンで見るのかわからないのですか?

たとえば、名前が 'Some App'の場合、二重引用符は、二重引用符で囲まれた文字列の中央に挿入されるため、不一致になります。それらをエスケープする '\ "で名前。

NSString *esc = [[lastApp localizedName] stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
+0

この回答は、jsonの見積もり問題に対処するときにも適用されます。ユニコードは確かに赤いハリーです。 –

+0

私の場合の「赤いニシン」は、「終わりを知らせる」の前に行方不明だった\ nでした。 –

関連する問題