错误:无法获得{«class»,«class»,...}的一些«class»

时间:2010-10-26 11:02:59

标签: applescript

我正在编写一个在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中执行脚本时出现的错误是:

  

无法获得«class cFlT»id 16112 of«class cUs?»id 15982 of«class cSrc»id 65的应用程序“iTunes”,...等等的«class cTrk»

现在,我真的不明白为什么它不起作用,虽然我想它必须与theAlbum中的项目是来自iTunes应用程序源的用户播放列表中的文件轨道这一事实有关。 '正义'曲目。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

在此示例中,我使用some item代替some track,这可以正常工作。

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"

由于示例中的所有项目都是从轨道继承的,因此我不知道它为什么不起作用,但事实并非如此。

答案 1 :(得分:0)

theAlbum是一个列表,而不是播放列表,因此它没有跟踪元素;它只有items

列表上的文档,其中声明“您还可以按类引用索引列表项”。是不完整的,因此具有误导性。看来你只能用内置类来做这件事。从我能收集到的,这就是原因:

Object specifiers2)是based on key-value codingspecifier might identify属性(对象属性或一对一关系)或元素(多对多关系)。在这个例子中,我们正在处理元素。要处理元素,底层的Objective-C类必须实现collection accessor pattern。也就是说,它必须implement at least -<key>, or -countOf<Key> and -objectIn<Key>AtIndex:(当然,它可以实现所有这些)。 list类为一组Applescript类执行此操作(如果您查看列表类的ObjC源,则会找到countOfApplication-objectInNumberAtIndex:等方法。可以想象,它可以使用适当的-doesNotRecognizeSelector:处理程序支持任意元素对象说明符,但是列表似乎没有以这种方式实现。由于列表没有-track-countOfTrack-objectInTrackAtIndex:处理程序,因此无法处理“first track of trackList”等说明符。