作为自动化工作流程的一部分,我希望能够在NSMutableDictionary中存储对applescript对象的引用。实际上,这样做是为了能够使用变量变量名。使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中?也许我可以推出自己的适用于pres的Objective-C代码?
任何帮助将不胜感激!
答案 0 :(得分:1)
AppleScript的reference
类型未桥接到ObjC,因此无法直接越过桥接。您可以将其包装在script
对象中(只要该对象继承自NSObject
),然后将其传递过来,尽管根据过去的经验,我发现创建和使用大量的桥接脚本对象也会使ASOC崩溃。
最简单的解决方案是将AS引用保留在AS端,并将它们存储在本地数据结构中,例如键值列表,二叉树或哈希列表。 (例如,正是由于这个原因,我的旧Objects library提供了相当快的DictionaryCollection
(哈希列表)对象。)