2016-11-30 1 views
0

Hier ist mein Skript:Xcode Apple: Änderungskennzeichen, den Inhalt der Variablen

property MyLabel : missing value 

on buttonClicked_(sender) 
    set the plistfile_path to "~/Desktop/MY_DATA.plist" 
    tell application "System Events" 
     set p_list to property list file (plistfile_path) 
     -- read the plist data 
     set theMyDataFromPlist to value of property list item "DATA1" of p_list 

     end tell 
end buttonClicked_ 

Dies würde die Daten nimmt ich von einem plist will und in einer Variablen (theMyDataFromPlist) eingestellt.

Wie kann ich diese Variable auf dem Etikett "MyLabel" drucken und das Skript automatisch aktualisieren lassen, wenn sich die Daten ändern?

Wenn ich auf den Text (oder eine andere Schaltfläche) klicke, kann ich den Wert in die Zwischenablage kopieren. (würde set the clipboard to theMyDataFromPlist arbeiten?)

Ich frage mich auch, ist das möglich, das gleiche mit Swift zu tun?

Antwort

1

Wie kann ich diese Variable auf dem Etikett "MyLabel"

Wo möchten Sie drucken drucken die Variable? Sie können Apple ein Dialog angezeigt werden:

set variable to 42 
display dialog "The value of variable is " & variable 

Apple nicht als Terminalsprache entwickelt, ist es für UI-Scripting ist, so dass es nicht wie die meisten Skriptsprachen ist, die nur einen Druck bieten, wie, wo würde der Benutzer sehen, die gedruckt Wert.

und das Skript automatisch aktualisieren, wenn sich die Daten ändern?

Nicht ganz sicher, was Sie hier erwarten. Dass Ihr System Ihr Skript magisch ausführt, wenn sich der Inhalt einer Datei ändert? Das wird nicht passieren. Sie können einen Launchd-Job erstellen und diese Datei überwachen und dann das Skript ausführen, wenn sich die Datei ändert. dies ist hier beschrieben:

https://discussions.apple.com/message/13182902#13182902

Aber einige Prozesse werden die Datei überwachen und wenn Ihr Skript so tun soll, hat es die ganze Zeit, non-stop zu laufen. Dann könnten Sie alle x Sekunden einen Code ausführen lassen, das Datum der letzten Änderung der Datei überprüfen und, wenn sich das ändert, den PLIST erneut lesen. Dieses Polling ist super hässlich, aber das Beste, was AS aus der Box machen kann.

BTW wo ist der Rest? Sie sagen

auch, wenn ich auf den Text (oder eine andere Schaltfläche), kann ich den Wert in die Zwischenablage kopieren.

Welcher Text? Welcher Knopf? Klingt so, als hätten Sie eine ganze Anwendung, aber alles, was Sie uns gezeigt haben, sind 11 Zeilen Skriptcode. Sie haben nicht einmal erwähnt, dass Sie eine ganze Anwendung mit einer Benutzeroberfläche haben. Ihre Frage beginnt mit "Hier ist mein Skript", so dass Sie es so klingen lassen, dass Sie nur 11 Zeilen haben.

(würde setzen die Zwischenablage? Zu theMyDataFromPlist arbeiten)

Warum Sie einfach nicht probieren Sie es aus?Das Einfügen dieser Zeile in den ScriptEditor hätte genauso lange gedauert, als diese Frage zu stellen. Ich habe es gerade ausprobiert und es stellt sich heraus, dass man nur Strings setzen kann.

Dieser Code wird nicht funktionieren:

-- bad code 
set variable to 42 
set the clipboard to variable 

Aber dieser Code funktioniert:

-- good code 
set variable to 42 
set the clipboard to "" & variable 

ich, dass man auch fragen, ist das gleiche mit Swift zu tun?

Persönlich würde ich nicht einmal in Betracht ziehen, eine Anwendung in AppleScript zu schreiben; Ich würde lieber aufhören, Code zu schreiben, bevor ich das tue. Natürlich kann dies in Swift oder in Obj-C gemacht werden. Alles, was Sie in AS tun können, kann in diesen anderen zwei Sprachen gemacht werden und nein, das Gegenteil trifft nicht zu.

Mit Obj-C oder Swift können Sie auch GCD verwenden und mit GCD-Überwachung eine Datei für Änderungen ist einfach. Nur sehen

https://stackoverflow.com/a/11447826/15809

+0

Dank für die Antwort, ja, aber ich bin immer Daten von Webseiten, (document.getElementsByClassName), die nicht durch rasche getan werden kann, oder zumindest das, was ich gesagt wurde. auch schaffe ich es immer noch nicht meine Daten in die Zwischenablage zu setzen, wahrscheinlich von etwas wirklich albernen in meinem Code –

+0

@KevinCork Jede C und Obj-C API kann auch in Swift verwendet werden; wirklich jede API, Sie müssen nur die Header-Dateien in Ihrem Bridging-Header enthalten, um den Swift-Compiler auf diese API aufmerksam zu machen (Frameworks von Apple sind Module, diese können direkt in Swift-Code importiert werden, wie 'import Dawin' für Beispiel: Alles, was kein Modul ist, hat immer noch eine Header-Datei und diese Datei kann in einen Bridging-Header eingefügt werden). Stellen Sie eine neue Frage, geben Sie dort einen tatsächlichen Code ein (nicht nur 11 Zeilen nicht verwandten AppleScript) und jemand hier wird Ihnen innerhalb von Minuten den gleichen Code in Swift zeigen. – Mecki

+0

@KevinCork In Bezug auf die Einstellung der Zwischenablage, wenn Sie mir Ihren Code nicht zeigen, kann ich Ihnen nicht helfen, tut mir leid. Und ich weiß immer noch nicht, was der AppleScript-Code in Ihrer Frage mit all dem zu tun hat. Es enthält nicht "document.getElementsByClassName", es wird auch nicht versucht, in die Zwischenablage zu schreiben. Wenn Sie andere Fragen haben, stellen Sie einfach andere Fragen zu SO; Bitte fügen Sie nicht viele zusammenhängende Fragen in eine einzige Frage ein. SO werden Benutzer Benutzern helfen und nur wenn Sie eine Frage zu einer Zeit stellen, finden andere Benutzer Ihre Frage, wenn sie ein ähnliches Problem haben und von der Antwort profitieren können. – Mecki

Verwandte Themen