1 votes

Pourquoi AppleScript fonctionne-t-il différemment dans El Capitan ?

Pourquoi dans El Capitan cette application dit 3 1 2 ? Avant El Capitan, elle indiquait 1 2 3.

Lorsque ce script est doublement cliqué, il doit indiquer 1 2 3.

on run
  say "1"
  testing()
end run

on testing()
  say "2"
end testing

on idle
  say "3"
  return 60
end idle

on quit
end quit

3voto

Pejvan Points 376

L'on idle y quit sont pour les Applets et non scripts. Les applets et les scripts sont différents, mais ils sont tous deux écrits en Applescript.

Une applet est une application script qui prend en charge les éléments suivants idle y quit tandis que script est comme n'importe quel autre script dans n'importe quel langage ; il s'exécute jusqu'à la fin, ne sait pas quand il est sur le point de quitter, ou quand il est inactif. L'applet est comme n'importe quelle autre application, si vous faites un clic droit et que vous cliquez sur "Ouvrir le contenu du paquet" d'une applet, vous verrez la ressemblance. L'applet peut avoir des ressources, peut être CodeSigned, peut avoir plusieurs script et être partagée sans aucun problème.

C'est votre problème, choisissez d'enregistrer le script en tant qu'application lorsque cela vous est demandé, sélectionnez également "Rester ouvert après le passage de la personne chargée de la manutention , alors votre idle s'exécutera.

Quelques autres choses, c'est toujours une bonne idée de retourner hors de chaque handler dans lequel vous n'êtes pas. run y testing Cela peut entraîner l'apparition d'un idle ne s'exécute pas, car il attendra que le gestionnaire de run pour terminer. Vous devez également insérer continue quit dans votre quit sinon il ne s'arrêtera jamais ; vous devrez le forcer à s'arrêter.

Pour plus d'informations Guide du langage AppleScript

0voto

Chris Page Points 7394

Premièrement : je ne peux pas reproduire votre problème sur OS X El Capitan 10.11 (15A284). Votre script dit "1", "2", "3" à chaque fois que je l'exécute.

L'ordre exact des messages "run" et "idle" n'ayant jamais été garanti, il est possible que les deux ordres ({1, 2, 3} et {3, 1, 2}) soient considérés comme corrects.

Cependant, si l'ordre des messages d'exécution et de repos est important pour votre script, vous pouvez utiliser une propriété script pour permettre au gestionnaire de repos de savoir quand le gestionnaire d'exécution s'est déjà exécuté et de ne rien faire tant qu'il ne s'est pas exécuté, par exemple,

property didRun : false

on run
    say "1"
    testing()
    set didRun to true
end run

on testing()
    say "2"
end testing

on idle
    if not didRun then
        say "has not run"
        return 1
    end if

    say "3"
    return 3
end idle

on quit
    set didRun to false

    say "quit"
    continue quit
end quit

Notez que la réinitialisation des didRun dans le quit est nécessaire car les valeurs des propriétés persistent normalement d'une exécution à l'autre (en étant réécrites dans le fichier script après l'exécution).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X