He estado tratando de averiguar cómo ejecutar applecript en un programa objetivo-c, pero hasta ahora no he podido.
Independientemente de cómo cargue la fuente en el NSAppleScript
objeto, simplemente no puedo hacer que se compile. La carga desde un archivo devuelve nil
ay la carga desde la fuente simplemente se niega a compilar.
No soy un programador de objetivo-c en ningún aspecto y estoy teniendo dificultades para descubrir cómo funciona este lenguaje de muerte cerebral . Es probable que todos y cada uno de los problemas estén relacionados con mi incapacidad para comprender por qué un constructor cambia su nombre en función de los argumentos que le proporcione.
Fuente de ejemplo de uno de mis muchos intentos: (nota, el script es correcto y funciona bien en Script Editor)
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString * source =
@"to go_home()\n"
" tell application \"Finder\" to open \"Home\"\n"
"end go_home\n"
"go_home()";
NSAppleScript * script = [[NSAppleScript alloc] initWithSource: source];
if ( script == nil)
NSLog(@"Script is nil");
NSLog(@"Script source = %@", script.source);
[script compileAndReturnError: nil];
[script executeAndReturnError: nil];
if ([script isCompiled])
NSLog(@"Script is compiled");
else
NSLog(@"Script is not compiled");
}
return 0;
}
Salida de ejemplo:
2017-12-05 11:05:48.249206+0100 applescript[11826:744415] Script source = to go_home()
tell application "Finder" to open "Home"
end go_home
go_home()
2017-12-05 11:05:48.262797+0100 applescript[11826:744415] Script is not compiled
Program ended with exit code: 0
Editar : parece que el problema está relacionado con XCode. Cuando compilo el programa en una terminal, todo funciona bien.
estoy obteniendo el script está compilado El programa terminó con el código de salida: 0 para el mismo código. puede verificar el error reemplazando
[script compileAndReturnError: nil];
[script executeAndReturnError: nil];
con
NSDictionary *error;
[script compileAndReturnError: &error];
[script executeAndReturnError: &error];
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras