2012-06-13 26 views
7

Ich versuche, ein copy/paste für meine auf die letzten aktiven App ausführen, hier ist mein Code:Apple von Mac App sagt: „Ende der Zeile erwartet, aber u201e gefunden“ u201C“

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]; 

Das Problem ist, dass auf einigen Computern es ganz gut funktioniert, aber auf anderen scheitert es mein Fehler Ausgabe von Fehlern, die von executeAndReturnError zurückgegeben wird, ist:.

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}"; 
}) 

ich kann nicht scheinen, um herauszufinden, was es bedeutet, oder warum es passiert ..

Wir haben versucht, den generierten Apple-Script-Code in den Apple Script Editor zu kopieren, und hier funktioniert es gut.

Meine App ist Sandboxed - ich habe die Paket-IDs für den Schlüssel "com.apple.security.temporary-exception.apple-events" für die Apps hinzugefügt, die ich unterstützen möchte.

Irgendwelche Vorschläge?

+0

\ U201c und \ u201d beide stehen für Anführungszeichen (links bzw. rechts). [Eingabe von Anführungszeichen auf einer Tastatur] (http://en.wikipedia.org/wiki/%22#Typing_quotation_marks_on_a_computer_keyboard) Ich glaube also, dass Sie das Zitat nicht "korrekt" umgehen. Spielen Sie mit dem Format der Zeichenfolge und die Zeichen, in denen du entkommst – erran

+0

Nun, ich habe die Unicodes übersetzt, aber ich kann nicht wirklich herausfinden, was schief läuft.Ich habe versucht, mit dem Apple-Skript zu spielen, aber es funktioniert nicht - der komische Teil ist, dass es funktioniert einige macs –

+0

Selbst wenn man einfache Applescripts wie "active this app" schreibt, erzeugt man denselben Fehler. –

Antwort

5

Ich vermute, dass die \ u201c und \ u201d rote Heringe sind und nur intelligente Anführungszeichen um ein Anführungszeichen in der Fehlermeldung von Apple-Skript darstellen, und Ihr Problem liegt mit dem lokalisierten Namen der letzten Anwendung, die Sie formatieren in das Skript. Ich bin mir nicht sicher, warum Sie das auf einer Maschine sehen und nicht auf einer anderen. Wenn beispielsweise der Name 'Some' App 'war, dann würden die doppelten Anführungszeichen nicht übereinstimmen, da sie in der Mitte einer doppelten Zeichenfolge in Anführungszeichen eingefügt würden. Sie sollten versuchen, alle doppelten Anführungszeichen in der Name mit '\' ', die ihnen entgeht.

z.B.

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

Diese Antwort ist auch anwendbar, wenn Probleme mit Zitaten in JSON behandelt werden. Die Unicodes waren in der Tat rote Heringe. –

+0

Der 'Red Hering' in meinem Fall war ein \ n vor 'Ende erzählen' –