Como faço para adicionar arte para um iTunes rastrear com obj-c appscript?
Pergunta
ATRACK é um ITReference * objeto, valor é um NSImage * objeto, inicializado através de um URL a um jpeg.
[[[[[aTrack artworks] data_] set] to:value] send];
Eu recebo a seguinte mensagem no 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=(
Então eu tentei o código a seguir:
NSData *imageData = [[NSData alloc] initWithData:[value TIFFRepresentation]];
[[[[[aTrack artworks] data_] set] to:imageData] send];
e obter esta mensagem em vez
2010-03-09 16:46:09.341 Sandbox[2193:a0f] Can't pack object of class NSConcreteData (unsupported type): <4d4d002a 00000000>
Na documentação appscript, ele diz que a propriedade "data" do item "obras de arte" é uma imagem de PICTPicture.
Como faço para converter um NSImage a um PICT? Estou usando o appscript tudo errado?
Solução
appscript não preencher NSImage, em parte porque NSImage é AppKit e ligações appscript contra apenas Foundation; em parte porque esta área de uso de eventos Apple não é bem specced. Em teoria, AEDescs relacionadas com a imagem deve conter um bloco padrão de dados de bitmap, mas ISTR vários aborrecimentos com PICT quando se lida com iTunes obras de arte. É confuso.
NSData não é superada, porque a embalagem de dados em uma AEDesc sem um tipo de descritor significativa é em grande parte inútil. Se você quer embalar uma instância NSData, uso +[NSAppleEventDescriptor descriptorWithDescriptorType:data:]
.
Também dê uma olhada na propriedade artwork
da classe raw data
. Isso é uma adição posterior e pode conter dados de imagem de forma mais sensata.
Oh, e dar uma olhada no quadro EyeTunes; não é tão flexível ou eficiente como usar AppleScript / appscript, mas eu acho que inclui o código para colmatar NSImage para AEDescs.