J'essaie de créer une nouvelle liste de lecture d'utilisateurs à l'aide du pont de script de cacao, mais je ne peux pas sembler le faire fonctionner. J'ai jusqu'à présent: Lorsque j'essaie d'ajouter un nom pour la liste de lecture, je reçois le message d'erreur: P> iTunesbridge [630: 80F] *** - [SBProxyByClass SetName:]: L'objet n'a pas encore été ajouté à un conteneur; Sélecteur non reconnu P>
blockQuote> Quelqu'un peut-il me dire dans la bonne direction? P> P>
5 Réponses :
Faire de nouveaux objets d'application est terriblement obscurciée dans SB. La procédure pseudo-cocoa-iSh Alloc-init-ine-ine-injection n'indique aucune ressemblance avec ce qui se passe en dessous. Bien que l'ALLOC-INIT semble créer un objet régulier que vous puissiez manipuler avec des appels de méthode ultérieurs, le résultat est en réalité une cale dont la seule fonction est d'être "insérée" dans un "tableau", à quel point SB envoie un IIRC, le seul point que vous pouvez réellement spécifier les propriétés initiales est dans En tout cas, voici comment vous créeriez normalement une nouvelle liste de lecture si on n'existe pas déjà: p> et, fwiw, voici comment je le ferais dans l'Objc, en utilisant Objc-Appscript (que j'ai écrit pour que je n'aurais pas à Utilisez SB, Natch): P> faire code> événement au processus cible. (Voir aussi ici et ICI pour les critiques SB.)
-IlitwithProperties: code>. Vous pouvez les définir une fois que l'objet a été «inséré», mais c'est une opération complètement différente (manipulation d'un objet qui existe déjà plutôt que de spécifier l'état initial pour un objet créé) afin de pouvoir facilement avoir des conséquences inattendues si vous n'êtes pas prudent. . P>
#import "ITGlue/ITGlue.h"
NSString *playlistName = @"new playlist";
ITApplication *itunes = [ITApplication applicationWithName: @"iTunes"];
ITReference *playlist = [[itunes playlists] byName: playlistName];
if ([[[playlist exists] send] boolValue])
playlist = [playlist getItem];
else
playlist = [[[[itunes make] new_: [ITConstant playlist]]
withProperties: [NSDictionary dictionaryWithObject: playlistName
forKey: [ITConstant name]]] send];
Hé, merci, vous avez raison, travaillant avec Scripting Bridge, c'est un peu de cauchemar. Objc-Appscript a l'air bien, mais un peu surkill dans mon cas, comme l'ajout de fichiers à une liste de lecture est tout ce que je suis après. Je l'ai acheté avec: Playlist = [[[[[[[[[iTunes ClassForCripCripClass: @ "Playlist"] ALLOC] Initidproperties: [Nsdictionary bla]]]; Donc merci pour le pointeur
Vous devez regarder dans des eyetunes. C'est un cadre open-source pour interagir avec iTunes utilisant l'objectif-c. Votre code aurait l'air beaucoup plus simple si vous l'avez fait à travers EyeTunes. P>
EyeTunes fait exactement la même chose que Scriptingbridge fait. Toujours choisi la superficie à la 3ème partie, pour des corrections de bugs et une taille d'application plus petite.
Cela ne répond pas vraiment à la question de l'OP.
juste une note rapide que [[Nom de la source] isequaltostring: @ "Bibliothèque"] code> ne fonctionne certainement pas sur des systèmes non anglais. Il serait peut-être préférable d'utiliser simplement
iTunessource * Bibliothèque = [[[Sources _Tunes] ObjectAindex: 0]; code> car le premier élément source est celui situé en haut, par exemple. la bibliothèque principale. P>
Le message d'erreur vous indique que les objets de pont de script tels que votre liste de lecture ne peuvent pas recevoir de messages tant qu'ils n'ont pas été ajoutés au SbelementalArray correspondant, de sorte que votre tentative de définition d'une propriété sur la liste de lecture avant de l'ajouter au tableau échoue.
La solution la plus simple consiste simplement à réorganiser les deux dernières lignes de code, comme ceci: p> L'autre option est d'utiliser initwithproperties: code> qui, selon votre commentaire sur une autre réponse, c'est ce que vous avez fini par faire. p> p>
C'est ce que j'ai fait pour identifier de manière fiable la bibliothèque. Je pourrais le faire mal.
[Nom de la source] ISEQUALTOSTRING: @ "Bibliothèque"] CODE> Avez-vous testé cela dans des systèmes non anglais? Semble fragile ...
Dans les systèmes non anglais, vous devez utiliser
([Source Kind] == iTunesSrcLibrary) code>