0

currentTrackのアートワークを取得するための次のコードがあります(を使用してiTunes.h):

iTunesArtwork *iTunesArtwork = [[iTunes.currentTrack artworks] objectAtIndex:0];
NSImage *artwork = iTunesArtwork.data;                   
if (artwork != nil){
    [_musicImageView setImage:artwork];
}

ほとんどのトラックで機能しますが、(トラックに画像がある場合でも)このエラーが発生することがあります。

NSImageCell's object value must be an NSImage.
2012-12-28 00:22:12.217 App[3256:303] (
    0   CoreFoundation                      0x00007fff904360a6 __exceptionPreprocess + 198
    1   libobjc.A.dylib                     0x00007fff8d5bf3f0 objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff90435e7c +[NSException raise:format:] + 204
    3   AppKit                              0x00007fff9747c31b -[NSImageCell setObjectValue:] + 106
    4   AppKit                              0x00007fff974b8563 -[NSImageView setImage:] + 90
    5   App                                 0x0000000100001b38 -[AppDelegate setupPlayer] + 600
    6   Foundation                          0x00007fff8d10c513 __NSFireTimer + 96
    7   CoreFoundation                      0x00007fff903f2da4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
    8   CoreFoundation                      0x00007fff903f28bd __CFRunLoopDoTimer + 557
    9   CoreFoundation                      0x00007fff903d8099 __CFRunLoopRun + 1513
    10  CoreFoundation                      0x00007fff903d76b2 CFRunLoopRunSpecific + 290
    11  HIToolbox                           0x00007fff939e40a4 RunCurrentEventLoopInMode + 209
    12  HIToolbox                           0x00007fff939e3e42 ReceiveNextEventCommon + 356
    13  HIToolbox                           0x00007fff939e3cd3 BlockUntilNextEventMatchingListInMode + 62
    14  AppKit                              0x00007fff97337613 _DPSNextEvent + 685
    15  AppKit                              0x00007fff97336ed2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
    16  AppKit                              0x00007fff9732e283 -[NSApplication run] + 517
    17  AppKit                              0x00007fff972d2cb6 NSApplicationMain + 869
    18  App                                 0x0000000100001822 main + 34
    19  libdyld.dylib                       0x00007fff93cb77e1 start + 0
)

何が起こっているのかについて何かアイデアはありますか?

4

1 に答える 1

1

それが画像であることを確認してください-それがゼロでないかどうかをチェックするだけでなく、それだけでは十分ではありません。hファイルのタイプは、オブジェクトが実際に持っているタイプであってはなりません。それはもっと似ています...それは画像である必要があります:D

if([artwork isKindOfClass:[NSImage class]]) {
    ....

コメントから。それはいつもうまくいくとは限りませんでした。エル。これ以上クラッシュすることはありませんが、一部の画像は表示されませんでした。rawDataをフォールバックとして使用しました。

//kind of like this
if(![artwork isKindOfClass:[NSImage class]]) {
    artwork = [[NSImage alloc] initWithData:tunesArtwork.rawData];
}
if([artwork isKindOfClass:[NSImage class]]) {
    ...
}
于 2012-12-28T00:30:45.327 に答える