2011-11-23 60 views
3

我有我的應用程序的性質,我叫busy腳本Cocoa應用程序性能

<property name="busy" code="mybs" type="boolean" access="r" description="Is application busy?"> 
    <cocoa key="isBusy"/> 
</property> 

而且sdef字典我的NSApplication類與isBusy訪問

- (BOOL)isBusy 
{ 
    return NO; 
} 

腳本

tell application "MyApplication" 
    properties 
end tell 

tell application "MyApplication" 
    busy 
end tell 

做工精細和busy財產是假的,但劇本

busy of application "MyApplication" 

返回錯誤

error "MyApplication got an error: Can’t make |busy| into type specifier." number -1700 from |busy| to specifier 

哪裏是我的錯?

+0

我不知道答案,但有時你需要明確使用「get」命令。當這種情況發生時,我認爲這只是一個令人費解的問題。那麼「忙於......」的工作呢? – regulus6633

+0

不,與沒有'get'相同的錯誤 – Dmitry

+0

如果你想要一行代碼:'告訴應用程序「MyApplication」變得忙碌。「只是你知道。 – v1Axvw

回答

1

由於busy是特定於應用程序的一個術語,它必須由tellusing terms from前面來在該代碼中使該術語已知。所有這些都將工作:

tell application "MyApplication" to busy 

tell application "MyApplication" 
    busy 
end tell 

using terms from application "MyApplication" 
    busy of application "MyApplication" 
end using terms from 

AppleScript的解析左到右的和必須知道有效的條件是什麼,然後才能分析它們。它不會跳到busy of application "MyApplication"的末尾來弄清楚如何解析表達式的開始。如果MyApplication有一個術語busy of它將完全改變該表達式的含義並導致一個矛盾:of將不再是用於構造對象說明符的關鍵字,這意味着它不會從MyApplication獲得術語,這意味着它將of關鍵字,它從應用程序中獲得術語...... ad infinitum。

你可能會奇怪,爲什麼一些應用特性,像nameversion並沒有引入應用程序的術語running工作。他們工作是因爲他們是由全球系統術語定義的,並不針對您的應用程序。

注意,'s佔有慾符不介紹術語,如tell做,所以這是不行的,要麼(除非你用tellusing terms from它前面):

application "MyApplication"'s busy 
0

這是行不通的,因爲它是非法的Apple Script句子。 由regulus6633建議的get命令將在您省略時自動預設(請參閱Apple腳本編輯器中的事件選項卡)。每個命令都需要一個執行者來執行它。隱含get命令你的破句沒有容器,有必要建立像T「的等等等等的等等」一符