OBJ-C AppScript를 사용하여 iTunes 트랙에 아트 워크를 추가하려면 어떻게합니까?
문제
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 문서에서 "아트 워크"항목의 "데이터"속성은 PictPicture 이미지라고합니다.
nsimage를 사진으로 어떻게 변환합니까? AppScript를 모두 사용하고 있습니까?
해결책
NSIMAGE는 Foundation에 대한 AppKit 및 AppScript 링크이기 때문에 AppScript는 NSIMAGE를 연결하지 않습니다. 이 Apple Events 사용 영역이 잘 지정되지 않기 때문에 부분적으로. 이론적으로, 이미지 관련 Aedescs에는 표준 비트 맵 데이터 블록이 포함되어야하지만 iTunes 아트 워크를 다룰 때 Pict 헤더가있는 다양한 번거 로움이 포함되어야합니다. 지저분 해요.
의미있는 디스크립터 유형이없는 AEDESC에 데이터를 포장하는 것은 크게 무의미하기 때문에 NSDATA는 연결되지 않습니다. NSDATA 인스턴스를 포장하려면 사용하십시오. +[NSAppleEventDescriptor descriptorWithDescriptorType:data:]
.
또한 살펴보십시오 artwork
클래스 raw data
재산. 이는 나중에 추가되었으며보다 현명한 형태의 이미지 데이터를 포함 할 수 있습니다.
아, 그리고 Eyetunes 프레임 워크를 살펴보십시오. AppleScript/AppScript를 사용하는 것만 큼 유연하거나 효율적이지는 않지만 NSIMAGE를 Aedescs로 연결하기위한 코드가 포함되어 있다고 생각합니다.