Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何指定同一类的多个AppleScript子元素?_Macos_Scripting_Applescript - Fatal编程技术网

Macos 如何指定同一类的多个AppleScript子元素?

Macos 如何指定同一类的多个AppleScript子元素?,macos,scripting,applescript,Macos,Scripting,Applescript,我正在将Apple事件脚本添加到我的应用程序中。我希望能够使用以下两种说法: -- Every instance of MyObject in the app every MyObject -- Only the instances of MyObject the user has selected selected MyObjects 以下是我的sdef文件的相关摘录: <dictionary> <suite ...> <class n

我正在将Apple事件脚本添加到我的应用程序中。我希望能够使用以下两种说法:

-- Every instance of MyObject in the app
every MyObject

-- Only the instances of MyObject the user has selected
selected MyObjects
以下是我的
sdef
文件的相关摘录:

<dictionary>
    <suite ...>
        <class name="application" code="capp" description="Top-level scripting object" plural="applications" inherits="application">
            <cocoa class="MyAppClass" />

            <element type="MyObject" access="r">
                <cocoa key="myobjects" />
            </element>

            <element name="selected MyObjects" code="ABCD" type="MyObject" access="rw">
                <cocoa key="selectedMyObjects" />
            </element>
        </class>

        <class name="MyObject" code="ABcd" inherits="item" plural="MyObjects">
        ...
        </class>
    </suite>
</dictionary>

...
当我调用
每个MyObject
时,它会像预期的那样返回一个对象列表。但是当我调用
选定的MyObjects
时,脚本编辑器会选择“MyObjects”部分并抱怨:

语法错误

应为行尾等,但找到复数类名


我怎样才能实现我的目标呢?

你的设计是错误的。请参阅,以获得关于良好用户体验实践的略知一二但总比一无所获的概述

正确的习惯用法是定义
选择
属性,通常在
应用程序
和/或
文档
上。这可能是可读写的,也可能是只读的,这取决于适合您的应用程序的内容

选择
属性的值为:

  • 单个定制对象说明符,用于标识当前选定的所有对象,例如:

    selection of application "Foo"
    

    一些更好的基于碳的应用程序和偶尔使用的Cocoa应用程序使用这种方法,允许用户执行强大的查询,例如:

    get (name of every MyObject of selection of document X)
    
    delete (every job whose status is completed)
    
    但是需要更多的工作来实现

  • 单个对象说明符的列表,每个说明符标识一个选定项,例如:

    {thing B of document X of application "Foo", 
     thing E of document X of application "Foo",...}
    
    这是不太强大的,因为用户不能在一个命令中操作所有选定的项目,而是必须一次迭代列表处理每个项目,但实现起来更便宜。Cocoa脚本即使在最好的时候也有点蹩脚和不灵活,而且在一次移动/复制/删除多个对象方面也毫无希望,这是基于Cocoa的应用程序中最常见的方法

    使用此属性更新您的
    sdef
    文件:

    <property name="selection" code="ABCD">
        <cocoa key="selectedMyObjects" />
        <type type="MyObject" list="yes" />
    </property>
    
    
    
  • 有关第一种(更好的)设计方法的示例,请查看脚本编辑器自己的字典。有关第二个示例,请参阅Mail的字典

    (提示:要在脚本编辑器中查看词典,请选择“文件>打开词典”,然后从列表中选择相应的项。要将该词典导出为SDEF文件,只需确保词典查看器窗口位于最前面,然后选择“文件>另存为”。)

    <property name="selection" code="ABCD">
        <cocoa key="selectedMyObjects" />
        <type type="MyObject" list="yes" />
    </property>