Сохранить объект 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 (список хэшей) объекты, созданные именно по этой причине.)

Другие вопросы по тегам