Сохранить объект AppleScript в NSMutableDictionary
Как часть рабочего процесса автоматизации, я хотел бы иметь возможность хранить ссылку на объект applecript внутри NSMutableDictionary. Это сделано для того, чтобы можно было использовать имена переменных переменных. Поддерживая экземпляр NSAppleScript живым, я смог бы вернуться к предыдущим результатам и продолжить с того места, где остановился.
Конкретно, я бы хотел хранить объект презентации (Microsoft PowerPoint) внутри NSMutableDictionary.
use framework "Foundation"
property memory : null
set memory to current application's NSMutableDictionary's dictionary()
-- function to get a ref to a presentation based on either a NAME or a PATH
on getPresentation(desc)
tell application "Microsoft PowerPoint"
if (item 1 of desc) is "" then
return item 1 of (get presentations whose path is (item 2 of desc))
else
return item 1 of (get presentations whose name is (item 1 of desc))
end if
end tell
end getPresentation
-- Fetch a currently open presentation (just an example)
-- this exists if you open a new presentation in PPT (no saving) and enter as title test
set pres to getPresentation({"test [Autosaved]", null})
memory's setObject:pres forKey:"presentation"
Это приводит к следующей ошибке: error "Can’t make «class pptP» 2 of application \"Microsoft PowerPoint\" into the expected type." number -1700 from «class pptP» 2
Я хотел бы иметь возможность сохранить объект pres для будущего использования, ссылаясь на него из содержащегося в нем кода Objective-C (через NSAppleScript, вызывая при необходимости методы через pres через оболочки). Я могу сказать яблочному сценарию сохранить результат какого-либо обработчика по какому-либо адресу и использовать его позже.
Я пытался использовать a reference to pres
решить вопрос, но не повезло.
Есть ли способ решить это? Возможно, класс обертки вокруг pres, который позволяет хранить его внутри NSMutableDictionary? Возможно, я смогу написать свой собственный код Objective-C, который будет работать на pres?
Любая помощь приветствуется!
1 ответ
AppleScript-х reference
Тип не соединен с ObjC, поэтому не может напрямую перейти через мост. Вы можете обернуть его в script
объект (пока этот объект наследует от NSObject
) и пропустить это, хотя в прошлом опыте я обнаружил, что создание и использование большого количества соединенных между собой объектов сценариев также приводит к сбою ASOC.
Самое простое решение - сохранить ссылки AS на стороне AS и сохранить их в собственной структуре данных, такой как список значений ключей, двоичное дерево или список хэшей. (Например, моя старая библиотека объектов предоставляет достаточно быстро DictionaryCollection
(список хэшей) объекты, созданные именно по этой причине.)