2 votos

¿Cómo puedo guardar una variable entre ejecuciones de Applescript?

Estoy tratando de guardar tres variables distintas a las que mi aplicación Applescript podría acceder en el lanzamiento, y si el usuario desea puede manipular esas variables desde la aplicación.

Más concretamente, estoy trabajando en un script que ejecuta un montón de ecuaciones basadas en la latitud y longitud seleccionadas por el usuario, y emite los resultados en una cadena, incluyendo el nombre de la ciudad. Si el usuario lo desea, puede elegir una ciudad diferente y reiniciar el script basándose en esa ciudad.

Elegir una ciudad diferente, establecer las variables y volver a ejecutar el script en consecuencia está bien. Puedo simplemente configurar una subrutina que contenga el siguiente código:

set choice to choose from list {"City A","City B","City X"}
if choice is "City A"
    set city to "City A"
    set lat to (latitude of City A)
    set lon to (longitude of City A)
else if choice is "City B"
...

Mi problema es que tengo que inicializar estas variables cuando se inicia el script. Puedo establecer un valor predefinido para estas variables, o puedo ejecutar esta subrutina al comienzo del script, pero no encuentro la forma de guardar la elección para futuras ejecuciones, de modo que el resultado de esta elección se convierta en el predeterminado. Es decir, si el script por defecto ejecuta estas ecuaciones para la Ciudad A, y yo elijo la Ciudad B de la lista, la próxima vez que el script se ejecute, debería ejecutar las ecuaciones para la Ciudad B automáticamente, sin ninguna entrada del usuario.

Intenté configurar un segundo script con exactamente tres líneas de código:

property city : "City A"
property longitude : (longitude of City A)
property latitude : (latitude of City A)

pero posteriormente me di cuenta de que falla exactamente por el mismo problema: los Applescripts no pueden guardar variables dentro de sí mismos entre tareas. Puedo actualizar una variable externa una vez cargada en el script actual, pero eso no edita realmente el script original.

Otra cosa que intenté fue crear un archivo en blanco en algún lugar y renombrarlo de acuerdo a la elección del usuario, luego probar el nombre del archivo y actualizar las variables en consecuencia, pero también me gustaría compartir la aplicación para que otros puedan usarla, y eso requeriría que ellos también tengan este archivo en una carpeta específica. Por alguna razón, script Editor no le gusta cuando trato de obtener la ruta de un archivo dentro de un paquete de aplicación, así que a menos que haya una solución para eso, no puedo simplemente ocultar el archivo dentro de la propia aplicación.

He visto aquí que si guarda el archivo como .applescript puedes hacer que escriba sobre sí mismo, pero no estoy seguro de cómo lo harías.

Soy consciente de que existe una cosa llamada Database Events que podría manipular, pero no estoy seguro de cómo lo haría.

Lo mínimo que busco es una forma de guardar las variables para acceder a ellas en el lanzamiento la próxima vez, pero si alguien pudiera abordar todas las posibilidades que he mencionado arriba, sería excelente.

2voto

Louis Hugues Puntos 151

Añade un property al comienzo de su script. Los cambios en esa propiedad durante la ejecución de su script se guardarán y estarán disponibles la próxima vez que se ejecute.

El valor establecido por una definición de propiedad no se restablece cada vez que se ejecuta el script; en cambio, persiste hasta que se recompila el script. [ src ]

0 votos

Como en, property city : "City A" ? Lo he intentado, pero no parece funcionar. Después de las líneas donde edito esos valores, reinicio el script, y sale exactamente lo mismo que antes. Si salgo del script y lo vuelvo a abrir, cambia el nombre de la ciudad, pero no la latitud ni la longitud, a pesar de que las manipulo todas exactamente igual.

0 votos

Las propiedades funcionan (y siempre han funcionado) bien cada vez que las he utilizado. Creo que es más probable que el problema esté en otra parte de tu código, pero es difícil asegurarlo sin verlo. A partir de los fragmentos que proporcionas arriba, no creo que esté haciendo lo que crees que debería estar haciendo. En concreto, se establece la variable city a la cadena "City A" pero luego obtener las propiedades lat/long de un objeto City A . ¿De dónde procede este objeto? Tal vez usted necesita preguntar acerca de su código en SO.

0 votos

No son propiedades de un objeto. Eso fue mala redacción de mi parte. Esos números están pre-especificados. Imagina que dice set lat to 5 o algo parecido.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X