Edited at

AppleScriptのレコードをNSDictionaryに変換すると予約語の属性が消えてしまう

More than 3 years have passed since last update.


  • AppleScriptのレコードには予約語のラベルとユーザ定義のラベルを混在させることができる


    • 予約語のラベル


      • 例:id, name, number

      • クラスやプロパティなど、システムで使われる予約語



    • ユーザ定義のラベル


      • 予約語以外のラベル

      • スクリプトエディタ上では変数と同じフォーマット(色、フォント)





  • AppleScriptのレコードに対応するAppleScriptObjCのクラスはNSDictionary


    • レコードからNSDictionaryへの変換はdictionaryWithDictionary:などを使って簡単にできる


    • NSDictionaryからレコードへの変換もas recordとキャストして得られる

    • これでCocoaの機能を存分に使える!と思いきや…




  • レコードをNSDictionaryに変換すると予約語の属性がすべて消えてしまうことが判明


    • ユーザ定義のラベルだけがNSDictionaryに認識される

    • 変換時にエラーが発生しないので注意



use framework "Foundation"

set aRecord to {id:7, name:"John", age:24}
--予約語のラベル:id, name
--ユーザ定義のラベル:age

set aDictionary to current application's NSDictionary's dictionaryWithDictionary:aRecord

aDictionary as record
--> {age:24}

aDictionary's allKeys() as list
-->{"age"}

aDictionary's valueForKey:"id"
--> missing value