Come faccio ad aggiungere opere d'arte su una traccia di iTunes con obj-c AppScript?
Domanda
Atrack è un ITReference * oggetto, il valore è un NSImage * oggetto, inizializzato tramite un URL di un jpeg.
[[[[[aTrack artworks] data_] set] to:value] send];
ottengo il seguente messaggio nel GDB:
2010-03-09 16:59:42.860 Sandbox[2260:a0f] Can't pack object of class NSImage (unsupported type): <NSImage 0x10054a440 Size={0, 0} Reps=(
Allora ho provato il seguente codice:
NSData *imageData = [[NSData alloc] initWithData:[value TIFFRepresentation]];
[[[[[aTrack artworks] data_] set] to:imageData] send];
e ottenere questo messaggio invece
2010-03-09 16:46:09.341 Sandbox[2193:a0f] Can't pack object of class NSConcreteData (unsupported type): <4d4d002a 00000000>
Nella documentazione AppScript, si dice che i "dati" di proprietà della voce "opere d'arte" è un'immagine PICTPicture.
Come faccio a convertire un NSImage ad un PICT? Sto usando l'AppScript tutto sbagliato?
Soluzione
Appscript non colmare NSImage, in parte perché è NSImage AppKit e collegamenti appscript contro soltanto Fondazione; in parte perché questa zona di Apple Event utilizzo non è ben speccato. In teoria, AEDescs relative all'immagine dovrebbero contenere un blocco standard di dati bitmap, ma ISTR vari fastidi con intestazioni PICT quando si tratta di opere d'arte di iTunes. E 'disordinato.
NSData non è colmato perché imballaggio dati in un AEDesc senza un tipo descrittore significativo è in gran parte inutile. Se si vuole mettere in valigia un'istanza NSData, utilizzare +[NSAppleEventDescriptor descriptorWithDescriptorType:data:]
.
Anche prendere un'occhiata alla proprietà artwork
della classe raw data
. Questa è un'aggiunta posteriore e possono contenere dati di immagine in una forma più sensibile.
Oh, e dare un'occhiata al quadro EyeTunes; non è così flessibile ed efficiente come l'utilizzo di AppleScript / appscript, ma penso che include il codice per colmare NSImage a AEDescs.