這是一個關於使用Cocoa腳本實現可編寫腳本的應用程序的問題。在我的可編寫腳本的應用程序中提供我自己的對象以「make new」
我的應用程序的腳本application
對象包含自定義類的元素,我們稱它爲flower
。
在.sdef文件中,flower
的Cocoa類被指定爲ScriptableFlower
。
在AppleScript的,一個可以寫信:
tell app "myapp"
get flowers
end tell
我的代碼提供了一個訪問函數用於檢索花:-(NSArray*)flowers
。
現在,我想實現的方式來添加新的花朵,這樣一方面可以寫:
tell app "myapp"
make new flower
end tell
它的默認行爲,使用NSCreateCommand
默認核心套件處理程序「使」,是如下:
腳本引擎會通過調用我flowers
函數取花的當前數組,然後實例ScriptableFlower
類的新可可對象,然後調用setFlowers:(NSArray*)
與包含我原來的對象的數組,再加上新創建的一個。
但是,這不適合我的應用程序:我不能允許腳本引擎隨意創建可編寫腳本的類的對象。
相反,我需要成爲一個實例化它們的人。
中途解決方案是實現默認的-(id)init
方法,然後檢測它是否被我調用 - 如果沒有,我可以採取額外的步驟。但那並不乾淨。我寧願不讓腳本引擎創建新的對象,而是自己提供它們,因爲我可能已經準備好了「某處」的對象。
Cocoa Scripting中是否有一些條款導致它在我要創建新的腳本對象時調用我?
更新
爲了澄清:該Cocoa Scripting docs解釋說,一個可以實施特別處理插入(insertObject:in<Key>AtIndex:
),使人們不必把整個NSArray的,但仍然導致腳本引擎創建物體。不過,我需要被要求創建對象。