Как добавить обложку на дорожку iTunes с помощью obj-c AppScript?

aTrack — это объект ITReference*, значение — это объект NSImage*, инициализированный через URL-адрес в формате jpeg.

[[[[[aTrack artworks] data_] set] to:value] send];

Я получаю следующее сообщение в 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=(

Затем я попробовал следующий код:

NSData *imageData = [[NSData alloc] initWithData:[value TIFFRepresentation]];
[[[[[aTrack artworks] data_] set] to:imageData] send];

и вместо этого получите это сообщение

2010-03-09 16:46:09.341 Sandbox[2193:a0f] Can't pack object of class NSConcreteData (unsupported type): <4d4d002a 00000000>

В документации AppScript говорится, что свойство "data" элемента "artwork" является изображением PICTPicture.

Как преобразовать NSImage в PICT? Я неправильно использую AppScript?


person demonslayer319    schedule 10.03.2010    source источник


Ответы (1)


Appscript не связывает NSImage, отчасти потому, что NSImage является AppKit, а appscript связывается только с Foundation; отчасти потому, что эта область использования событий Apple не очень хорошо определена. Теоретически AEDesc, связанные с изображениями, должны содержать стандартный блок растровых данных, но ISTR создает различные проблемы с заголовками PICT при работе с произведениями искусства iTunes. Это грязно.

NSData не является мостом, потому что упаковка данных в AEDesc без осмысленного типа дескриптора в значительной степени бессмысленна. Если вы хотите упаковать экземпляр NSData, используйте +[NSAppleEventDescriptor descriptorWithDescriptorType:data:].

Также взгляните на свойство raw data класса artwork. Это более позднее дополнение, и оно может содержать данные изображения в более удобной форме.

О, и взгляните на фреймворк EyeTunes; это не так гибко и эффективно, как использование AppleScript/appscript, но я думаю, что он включает код для соединения NSImage с AEDescs.

person has    schedule 11.03.2010