Ошибка: Не удается получить некоторый «класс» из {«class», «class», ...} - PullRequest
0 голосов
/ 26 октября 2010

Я пишу Applescript для использования в iTunes, в котором в какой-то момент я хочу выбрать любой трек из списка треков, но то, как я ожидал, что он будет работать, выдает ошибку. Вот код:

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 cTrk» из {«class cFlT» с идентификатором 16112 из «class cUsP» с идентификатором 15982 из «class cSrc» с идентификатором 65 приложения «iTunes», ... и т. Д.}

Теперь я не совсем понимаю, почему это не работает, хотя я предполагаю, что это должно быть как-то связано с тем фактом, что элементы в альбоме являются дорожками файлов из плейлиста пользователя из источника из приложения iTunes. «просто» треков. Может ли кто-нибудь помочь мне здесь?

Ответы [ 2 ]

1 голос
/ 26 октября 2010

В этом примере я использую 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"

, поскольку все элементы в вашем примере наследуются ототслеживать, я не знаю, почему это не работает, но это не так.

0 голосов
/ 01 ноября 2010

theAlbum - это список, а не список воспроизведения, поэтому в нем нет элементов дорожки; он имеет только предметов .

Документация по спискам, где говорится: «Вы также можете ссылаться на проиндексированные элементы списка по классам». является неполным и, следовательно, вводит в заблуждение. Кажется, вы можете сделать это только со встроенными классами. Из того, что я могу почерпнуть, вот почему:

Спецификаторы объекта ( 2 ) равны на основе кодирования значения ключа . Спецификатор может идентифицировать свойство (атрибут объекта или отношение «один к одному») или элемент (отношение ко многим). В примере мы имеем дело с элементами. Для обработки элементов базовый класс Objective-C должен реализовывать шаблон доступа collection . То есть он должен реализовать по крайней мере -<key>, или -countOf<Key> и -objectIn<Key>AtIndex: (он, конечно, может реализовать их все). Класс списка делает это для заданного количества классов Applescript (если вы заглянули в исходный код ObjC для класса списка, вы найдете такие методы, как countOfApplication и -objectInNumberAtIndex:). Он мог предположительно поддерживать произвольные спецификаторы объекта элемента с соответствующим обработчиком -doesNotRecognizeSelector:, но списки, похоже, не были реализованы таким образом. Поскольку списки не имеют обработчиков -track, -countOfTrack или -objectInTrackAtIndex:, они не могут иметь дело со спецификатором, таким как "first track of trackList".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...