2010-10-26 5 views
0

J'écris un Applescript pour une utilisation dans iTunes où à un moment donné, je veux choisir une piste d'une liste de pistes, mais la façon dont je m'attendais à ce qu'il fonctionne donne une erreur. Voici le code:Erreur: Impossible d'obtenir une «classe» de { «classe», «classe», ...}

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 

L'erreur que je reçois quand j'exécute le script à partir d'iTunes est:

Can't get some «class cTrk» of {«class cFlT» id 16112 of «class cUsP» id 15982 of «class cSrc» id 65 of application "iTunes", ... etc}

Maintenant, je ne vois pas vraiment pourquoi cela ne fonctionne pas, même si je suppose que cela doit avoir quelque chose à voir avec le fait que les éléments de l'album sont des pistes de fichiers provenant d'une liste de lecture de l'utilisateur de la source de l'application iTunes au lieu de pistes 'justes'. Est-ce que quelqu'un pourrait m'aider?

+0

D'où provient 'aTrack'? –

+0

aurait été bien si vous aviez fourni un exemple de travail. vois la mienne ci-dessous. –

+0

Ok, désolé. Sur la base de votre réponse, j'ai réduit l'exemple à l'essence de ma confusion. Cela fonctionne: "dire à l'application" iTunes "pour définir un Track à une piste", mais cela ne fonctionne pas: "dire à l'application" iTunes "pour définir un Track à une piste en tant que piste». Pourquoi? –

Répondre

1

Dans cet exemple, j'utiliser some item au lieu de some track, qui fonctionne bien.

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 

résultats dans

URL track id 87 of library playlist id 82 of source id 64 of application "iTunes" 

Comme tous les éléments de votre exemple héritant de la piste, je ne sais pas pourquoi cela ne fonctionne pas, mais il ne fonctionne pas.

+0

Merci, même si ça ne répond pas à ma question, ça m'aide. (Peut-être que j'ai posé la mauvaise question. –

0

theAlbum est une liste, pas une liste, il ne comporte pas d'éléments de piste; il a seulement items.

La documentation sur les listes, où il est dit: « Vous pouvez également consulter les éléments de liste indexés par classe. » est incomplet et donc trompeur. Il semble que vous ne pouvez le faire qu'avec des classes intégrées. De ce que je peux glaner, voici pourquoi:

Object specifiers (2) sont based on key-value coding. A specifier might identify une propriété (un attribut d'objet ou une relation un-à-un) ou un élément (une relation à-plusieurs). Dans l'exemple, nous traitons d'éléments. Pour gérer les éléments, la classe Objective-C sous-jacente doit implémenter un collection accessor pattern. Autrement dit, il doit implement at least -<key>, or -countOf<Key> and -objectIn<Key>AtIndex: (il peut, bien sûr, mettre en œuvre tous). La classe list le fait pour un nombre défini de classes Applescript (si vous avez jeté un œil à la source ObjC pour la classe list, vous trouverez des méthodes comme countOfApplication et -objectInNumberAtIndex:). Il est concevable de prendre en charge des spécificateurs d'objets élémentaires arbitraires avec un gestionnaire -doesNotRecognizeSelector: approprié, mais les listes ne semblent pas avoir été implémentées de cette manière. Étant donné que les listes n'ont pas -track, -countOfTrack ou -objectInTrackAtIndex: gestionnaires, ils ne peuvent pas faire face à un spécificateur comme « first track of trackList ».

+0

Cela n'a aucun sens, car l'erreur indique spécifiquement que la liste contient des pistes de fichiers, et selon la page que vous avez mentionnée, 'vous pouvez également vous référer aux éléments de la liste indexée par classe'. –

+0

La mise à jour a-t-elle plus de sens? Les informations pertinentes sont dispersées dans la documentation Apple sur Applescript, mais cela vaut la peine de lire les documents et de fusionner les informations. – outis

+0

En outre, si un ingénieur Apple ayant accès à la source AppleScript arrive à lire ceci, pourriez-vous confirmer mes soupçons (tant que cela ne casse aucune NDA)? – outis

Questions connexes