Applescript 错误:无法获取{«类»,«类»,…}的某些«类»

Applescript 错误:无法获取{«类»,«类»,…}的某些«类»,applescript,Applescript,我正在写一个在iTunes中使用的Applescript,在这个脚本中,我想从曲目列表中选择任何曲目,但我预期的工作方式会出现错误。代码如下: tell application "iTunes" set thePlaylist to the first playlist whose name is "Missing track count" -- ... -- populate a list of strings: albumList -- ... rep

我正在写一个在iTunes中使用的Applescript,在这个脚本中,我想从曲目列表中选择任何曲目,但我预期的工作方式会出现错误。代码如下:

tell application "iTunes"
    set thePlaylist to the first playlist whose name is "Missing track count"
    -- ...
    -- populate a list of strings: albumList
    -- ...
    repeat with albumName in the albumList
        set theAlbum to (the tracks of thePlaylist whose album is albumName)
        display dialog "Found " & (count theAlbum) & " tracks in the album"
        set aTrack to some track of theAlbum -- ERROR OCCURS HERE
    end repeat
end tell
我在iTunes中执行脚本时遇到的错误是:

无法获取{«类别cFlT»id 16112«类别cUsP»id 15982«类别cSrc»id 65»应用程序iTunes的«类别cTrk»等}

现在,我真的不明白为什么它不起作用,尽管我猜这一定与以下事实有关:album中的项目是来自iTunes应用程序源的用户播放列表中的文件曲目,而不是“仅仅”曲目。有人能帮我吗?

在这个例子中,我使用了一些项目,而不是一些曲目,效果不错

tell application "iTunes"
    set thePlaylist to the first playlist
    set x to (the tracks of thePlaylist)
    set aTrack to some item in x
end tell
导致

URL track id 87 of library playlist id 82 of source id 64 of application "iTunes"
由于您的示例中的所有项目都继承自曲目,我不知道为什么它不起作用,但它不起作用。

album是一个列表,而不是播放列表,因此它没有曲目元素;它只有一个

关于列表的文档,其中说明您还可以按类引用索引列表项。是不完整的,因此具有误导性。似乎您只能对内置类执行此操作。据我所知,原因如下:


是的。属性对象属性或一对一关系或元素对多关系。在本例中,我们处理的是元素。要处理元素,底层Objective-C类必须实现一个。也就是说,它必须——当然,它能够实现所有这些目标。list类对一定数量的Applescript类执行此操作。如果查看list类的ObjC源代码,您会发现类似countOfApplication和-objectInNumberAtIndex的方法:。可以想象,它可以使用适当的-doesNotRecognizeSelector:handler支持任意元素对象说明符,但列表似乎没有以这种方式实现。由于列表没有-track、-countOfTrack或-objectintrackatinex:handlers,因此它们无法处理诸如trackList的第一个track这样的说明符。

aTrack从何而来?如果您提供了一个工作示例,那就太好了。请看下面我的。好的,对不起。根据你的回答,我把这个例子简化为我困惑的本质。这是可行的:告诉应用程序iTunes将aTrack设置为某个曲目,但这不起作用:告诉应用程序iTunes将aTrack设置为某个曲目作为曲目。为什么?评论中有问题的代码可以变得更简单:告诉应用程序iTunes获取一些跟踪作为跟踪。此示例的问题与问题中的问题不同。要将一个类强制到另一个类,应用程序必须定义一个类。显然,iTunes没有定义从一个曲目到另一个曲目的强制处理程序。这似乎并不罕见:窗口1作为窗口。谢谢,虽然它没有回答我的问题,但它确实帮助了我。也许我问错了问题。这没有意义,因为错误明确指出列表包含文件轨迹,并且根据您提到的页面,“您也可以按类引用索引列表项”。更新是否更有意义?相关信息散落在苹果关于Applescript的文档中,但阅读这些文档并整合这些信息是值得的。此外,如果一位能够访问Applescript源代码的苹果工程师碰巧读到了这篇文章,只要它没有违反任何保密协议,你能证实我的怀疑吗?