2016-11-30 4 views
0

Вот мой сценарий:Xcode AppleScript: этикетки изменения, которые содержание переменной

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_ 

Это отвезут данные, которые я хочу от PLIST и установить в переменном (theMyDataFromPlist).

Как напечатать эту переменную на ярлыке «MyLabel» и сделать автоматическое обновление сценария при изменении данных?

также, когда я нажимаю на текст (или другую кнопку), могу ли я скопировать значение в буфер обмена. (будет set the clipboard to theMyDataFromPlist работы?)

Я также удивляюсь, что можно сделать то же самое с Swift?

ответ

1

Как я могу напечатать эту переменную на этикетке «MyLabel»

Где бы вы хотели печати переменной? Вы можете сделать AppleScript отобразить диалог:

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

AppleScript не предназначен в качестве терминального языка, то для написания сценариев пользовательского интерфейса, так что это не так, как большинство языков сценариев, которые просто предлагают печать, как где бы увидеть напечатанный пользователь стоимость.

и сделать автоматическое обновление сценария при изменении данных?

Не совсем уверен, чего вы ожидаете отсюда. Что ваша система волшебным образом запускает ваш скрипт всякий раз, когда изменяется содержимое файла? Это не произойдет. Вы можете создать задание запуска и запустить программу для запуска этого файла, а затем выполнить скрипт при изменении файла; это описано здесь:

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

Но какой-то процесс будет контролировать файл и, если ваш сценарий должен сделать это, он должен быть запущен все время, нон-стоп. Затем вы можете сделать некоторый код за один раз каждые X секунд, проверив дату последней модификации файла и всякий раз, когда это изменится, перечитайте plist. Этот опрос супер уродливый, но лучшее, что AS может сделать из коробки.

ИСТОЧНИК Где все остальное? Вы говорите

также, когда я нажимаю на текст (или другую кнопку), могу скопировать значение в буфер обмена.

Какой текст? Какая кнопка? Звучит так, будто у вас есть целое приложение, но все, что вы нам показали, - это 11 строк кода сценария. Вы даже не упоминали, что у вас есть приложение с пользовательским интерфейсом. Ваш вопрос начинается с «Вот мой сценарий», поэтому вы делаете так, как будто это 11 строк - все, что у вас есть.

(будет установить буфер обмена theMyDataFromPlist работать?)

Почему вы просто не попробовать?Вставка этой строки в ScriptEditor заняла бы столь же долгое, чем задание этого вопроса. Я просто попробовал, и получается, что вы можете устанавливать только строки.

Этот код не будет работать:

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

Но этот код работы:

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

Я также задаюсь вопросом, что можно сделать то же самое с Swift?

Лично я бы даже не подумал о написании приложения в AppleScript; Я бы предпочел прекратить писать код, прежде чем я это сделаю. Конечно, это можно сделать в Swift или в Obj-C. Все, что вы можете сделать в AS, можно сделать на этих двух других языках, и нет, наоборот, это не так.

Используя Obj-C или Swift, вы также можете использовать GCD и с GCD-контролем файл для внесения изменений легко. Просто увидеть

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

+0

Благодарю за ответ, да, но я получаю данные с веб-страницы, (document.getElementsByClassName), который не может быть сделано быстрым или, по крайней мере, то, что мне сказали. также я до сих пор не могу установить свои данные в буфер обмена, возможно, из чего-то действительно глупого в моем коде –

+0

@KevinCork Каждый C и Obj-C API также могут использоваться в Swift; на самом деле каждый API, вам нужно включить только заголовочные файлы в заголовок моста, чтобы компилятор Swift знал об этом API (фреймворки из Apple - это модули, они могут быть непосредственно «импортированы» в код Swift, например «import Dawin» для Например, все, что не является модулем, по-прежнему будет иметь заголовочный файл, и этот файл может быть включен в заголовок моста). Задайте новый вопрос, поместите там какой-то фактический код (не только 11 строк несвязанного AppleScript), и кто-то здесь покажет вам тот же код в Swift за считанные минуты. – Mecki

+0

@KevinCork Что касается настройки буфера обмена, если вы не показываете мне свой код, то я не могу вам помочь, извините. И я до сих пор не знаю, что AppleScript код в вашем вопросе имеет отношение ко всему этому. Он не содержит 'document.getElementsByClassName', в буфер обмена также нет попытки записать. Если у вас разные вопросы, задавайте разные вопросы по SO; пожалуйста, не ставьте много не связанных вопросов в один вопрос. SO - пользователи пользователей, и только если вы задаете один вопрос одновременно, другие пользователи найдут ваш вопрос, если у них есть аналогичная проблема, и вы можете получить прибыль от ответа. – Mecki

Смежные вопросы