2012-06-13 22 views
7

Estoy tratando de realizar un copiar/pegar para mi a la de la última aplicación activa, aquí está mi código:Applescript desde Mac App dice "esperado final de la línea, pero no encontró 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]; 

El problema es que en algunos equipos funciona muy bien, pero en los demás fracasa Mi salida de error de error que se devuelve por executeAndReturnError es:.

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

me parece que no puede averiguar lo que significa o por qué sucede.

Intentamos copiar el código de secuencia de comandos de Apple generado en el editor de Apple Script, y aquí funciona perfectamente.

Mi aplicación es espacio aislado: he agregado los identificadores de paquete para la clave "com.apple.security.temporary-exception.apple-events" para las aplicaciones que deseo admitir.

¿Alguna sugerencia?

+0

\ U201c y \ u201d ambos representan comillas (izquierda/derecha respectivamente). [Escribir citas en un teclado] (http://en.wikipedia.org/wiki/%22#Typing_quotation_marks_on_a_computer_keyboard) Me hace creer que no está escapando de la cita "correctamente. Juega con el formato de la cadena y los personajes de los que estás escapando. – erran

+0

Bueno, he traducido los unicodes pero no puedo descifrar qué es lo que falla. He intentado jugar con el script de Apple, pero no funciona, lo extraño es que funciona en algunos macs. –

+0

Incluso haciendo simples manuscritos como "active this app" produce el mismo error. –

Respuesta

5

Supongo que \ u201c y \ u201d son referencias falsas y solo representan citas inteligentes alrededor de una comilla doble en el mensaje de error producido por Apple Script, y su problema reside en el nombre localizado de la última aplicación que está formateando en el guion No estoy seguro de por qué podría ver esto en una máquina y no en otra.

Por ejemplo, si el nombre era 'Alguna' Aplicación ', las comillas dobles no coincidirían, ya que terminarían siendo inyectadas en el medio de una cadena entre comillas dobles. Es posible que desee intentar reemplazar las comillas dobles en el nombre con '\ "' que los escapará.

p. Ej.

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

esta respuesta es aplicable también al tratar problemas de cotización en json. los unicodes eran, de hecho, pistas falsas. –

+0

La 'arenque roja' en mi caso era una falta \ n antes de 'fin decir' –

Cuestiones relacionadas