这是一个关于使用 Cocoa Scripting 实现可编写脚本的应用程序的问题。
我的应用程序的可编写脚本application对象包含自定义类的元素,我们称之为flower。
在 .sdef 文件中,Cocoa 类flower被指定为ScriptableFlower.
在 Applescript 中,现在可以编写:
tell app "myapp"
get flowers
end tell
我的代码提供了一个用于检索花的访问器函数:-(NSArray*)flowers.
现在,我喜欢实现一种添加新花的方法,这样就可以编写:
tell app "myapp"
make new flower
end tell
默认行为,使用“make”的默认核心套件处理程序 using NSCreateCommand,如下所示:
脚本引擎将通过调用我的函数来获取当前的花数组flowers,然后实例化一个新的 Cocoa 类对象ScriptableFlower,然后setFlowers:(NSArray*)使用包含我的原始对象和新创建的对象的数组进行调用。
但是,这对我的应用程序不利:我不能允许脚本引擎随意创建可编写脚本的类的对象。
相反,我需要成为实例化它们的人。
一个中途的解决方案是实现默认-(id)init方法,然后检测它是否被我调用 - 如果没有,我可以采取额外的步骤。但这并不干净。我宁愿根本不让脚本引擎创建新对象,而是自己提供它们,因为我可能已经准备好“某处”的对象。
Cocoa Scripting 中是否有一些规定会导致它在需要我创建新的可编写脚本的对象时调用我?
更新
澄清一下:Cocoa Scripting 文档解释说可以实现特殊的插入处理程序(insertObject:in<Key>AtIndex:),这样就不必占用整个 NSArray,但这仍然会导致脚本引擎创建对象。不过,我需要被要求创建对象。