2016-04-28 65 views
0

在我的可腳本化應用程序中,其中一個屬性是已命名記錄類型,並且該記錄類型也已在sdef中聲明(名爲「custom record」) 。AppleScript:使用帶有記錄值的「who」不起作用

我能得到這樣的記錄:

get owner of anElement 
    --> {pool:"test", position:2} 

我也能成功地測試了這個問題是這樣的:

set target to {pool:"test", position:2} 
if owner of anElement = target then 
    -- found! 

但我不能在使用它,其條款:

get allElements whose owner = target 
    --> {} 

我也不能在測試中使用missing value

get allElements whose owner = missing value 
    --> error number -1700 from missing value to custom record 

這是AppleScript的預期行爲,即它無法處理哪些子句中的記錄?

或者我做錯了什麼?到目前爲止,我還沒有實施任何強制處理程序或特殊記錄處理程序,因爲沒有任何信息表明我需要它們。

另外,請參閱我的相關問題:Cocoa Scripting: Returning "null" vs. "missing value"

回答

1

簡短的回答:這是正常現象。

其子句僅適用於element引用類型(具有對象說明符的類),但不適用於記錄類型和自定義列表。

即使Finder的selection屬性也不能被其子句過濾。

+0

啊,*只有具有對象說明符的類纔有意義。我會考慮將記錄轉換爲單獨的屬性,然後使其更容易處理。這只是記錄中的兩項。我認爲使用記錄類型會使它在字典中看起來更乾淨,但這並不是必須的。 –

+0

事實上,OP的AS代碼應該可以工作,因爲他正在將查詢應用於一對多關係('TEST'的allElements),而不是一組記錄。無法對包含記錄的屬性進行相等性測試很可能是由於Cocoa Scripting有點低劣,並且未能正確執行'owner = {pool:「test」,position:2}'測試。至於'缺少值'失敗,OP應該在屬性的類型聲明中檢查他的SDEF包含''。 – foo

+0

@foo由於缺少「NSScriptObjectSpecifier」,其子句不適用於記錄類型。這是事實。 – vadian