0 votos

¿Cómo decirle a Applescript que llame a la inicialización de una clase de Fondation?

Una subpregunta podría ser: ¿cómo encontrar el nombre de AppleScript de las instancias de una clase?

Contexto: Utilizo lo siguiente para acceder a las variables de NSTimeZone y aplicar métodos.

use scripting additions -- esencial para usar (current date) con el framework "Foundation"
use framework "Foundation"

tell class "NSTimeZone" of current application to resetSystemTimeZone()

set aTZ to current application's NSTimeZone
set localZone to aTZ's localTimeZone()
set defaultZone to aTZ's defaultTimeZone()
set aDate to (current date)

defaultZone's |name|() as string
defaultZone's abbreviation as string
defaultZone's abbreviationForDate:aDate
defaultZone's daylightSavingTimeOffsetForDate:aDate
defaultZone's secondsFromGMT()
defaultZone's secondsFromGMTForDate:aDate

etc.

En la documentación de Apple, la última línea anterior destinada a SWIFT describe el uso de la siguiente manera:
func secondsFromGMT(for aDate: Date) -> Int

Fue difícil encontrar la formulación correcta para Applescript (secondsFromGMTForDate:aDate) pero lo descubrí. Sin embargo, lo que no puedo concebir es cómo llamar a un inicializador como los descritos para SWIFT:

init?(name tzName: String)  
convenience init(forSecondsFromGMT seconds: Int)

Basándome en el patrón anterior, probé todo tipo de formulaciones como estas:

defaultZone's initWithName:"America/Toronto"  
tell defaultZone to initName:"EST"  
tell defaultZone to initNameString:"EST"  
tell defaultZone to initTzName:"EST"  
tell class NSTimeZone of current application to set SecondsFromGMT to 3600  
tell defaultZone to initforSecondsFromGMT:3600   
tell defaultZone to init:forSecondsFromGMT  
defaultZone's initNameString("EST")

...y muchas otras variaciones. Siempre obtengo un error como este:

error "-[_NSSwiftTimeZone initWithName]: unrecognized selector sent to instance 0x7fc514913750" number -10000

De hecho, obtengo el mismo error incluso si escribo algo como

tell defaultZone to playPiano:"EST"

Entonces entiendo que no tengo el nombre correcto (selector) para la llamada. Y tal vez tampoco la forma correcta de llamar. Además, importa la mayúscula en los nombres.

¿Cuál es la forma correcta de hacerlo? ¿Existe alguna forma de listar las instancias, variables, métodos, funciones de una clase NS tal como se refieren en Applescript?

0voto

red_menace Puntos 111

AppleScript no está configurado para usar Swift o su documentación. Configurar el lenguaje de documentación de Apple en Objective-C es la forma de proceder, ya que eso es lo que utiliza el puente AppleScriptObjC. A partir de ahí, la conversión a AppleScript es bastante consistente.

El defaultTimeZone es una propiedad de la clase que se puede establecer en una zona horaria para usar si no desea utilizar la localTimeZone. Como descubriste, tus mensajes de error dicen que no se puede utilizar con ese método (selector) en particular.

La documentación enumera las diversas propiedades y métodos para la clase en particular y la clase de la que hereda. Hay algunos métodos de clase de conveniencia que devuelven un objeto, por ejemplo timeZoneWithName, pero los diversos métodos init deben usarse con un método alloc para obtener una nueva instancia, por ejemplo:

set defaultZone to current application's NSTimeZone's alloc's initWithName:"America/Toronto"
-- o --
set defaultZone to current application's NSTimeZone's timeZoneWithName:"America/Toronto"

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