Сохранить объект AppleScript в NSMutableDictionary - PullRequest
0 голосов
/ 08 января 2019

Как часть рабочего процесса автоматизации, я хотел бы иметь возможность хранить ссылку на объект applecript внутри NSMutableDictionary. Это сделано для того, чтобы можно было использовать имена переменных переменных. Поддерживая экземпляр NSAppleScript живым, я смог бы вернуться к предыдущим результатам и продолжить с того места, где остановился.

Конкретно, я бы хотел сохранить объект Presentation (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 через оболочки). Я могу сказать appleScript, чтобы он хранил результат какого-то обработчика по какому-то адресу и использовал его позже.

Я пытался использовать a reference to pres для решения проблемы, но безуспешно.

Есть ли способ решить это? Возможно, класс обертки вокруг pres, который позволяет хранить его внутри NSMutableDictionary? Возможно, я смогу написать свой собственный код Objective-C, который будет работать на pres?

Любая помощь будет высоко ценится!

1 Ответ

0 голосов
/ 08 января 2019

Тип AppleScript reference не связан с ObjC, поэтому не может напрямую перейти через мост. Вы можете обернуть его в объект script (если этот объект наследует от NSObject) и передать его, хотя в прошлом опыте я обнаружил, что создание и использование большого количества объектов сценария с мостовыми соединениями также приводит к сбою ASOC.

Самое простое решение - сохранить ссылки AS на стороне AS и сохранить их в собственной структуре данных, такой как список значений ключей, двоичное дерево или список хэшей. (Например, моя старая Библиотека объектов предоставляет достаточно быстрые DictionaryCollection (хэш-список) объекты, созданные именно по этой причине.)

...