2011-07-07 115 views
4

我有以下代碼從MPMediaItemPropertyArtWork獲取UIImage以在我的視圖中顯示coverArt。我從mediaItem中獲得一個非NULL圖形,但是,當我嘗試從圖稿中提取UIImage時,它會返回NULL,並且在我的UIImageView中看不到任何東西。任何幫助將不勝感激。無法從MPMediaItemPropertyArtWork獲取UIImage

CGSize artworkSize = CGSizeMake(30, 30); 
UIImage *artworkImage; 
MPMediaItemArtwork *artwork = [song valueForProperty: MPMediaItemPropertyArtwork]; 
if (artwork) { 
    NSLog(@"artwork available"); 
    artworkImage = [artwork imageWithSize:artworkSize]; 
} else { 
    NSLog(@"artwork not available"); 
    artworkImage = [UIImage imageNamed:@"EmptyAlbum.png"]; 
} 

NSLog(@"artworkImage = %@", artworkImage); 

coverArtView.image = artworkImage; 
+0

您是否發現任何解決方案? – Bartu

+0

可能重複的[MPMediaItemArtwork爲空,而覆蓋在iTunes中可用](http://stackoverflow.com/questions/25998621/mpmediaitemartwork-is-null-while-cover-is-available-in-itunes) –

回答

3

試試這個 - 使用UItableview來顯示專輯的詳細信息。

declare MPMediaItemCollection * userMediaCollection;

-(void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { 

[self setUserMediaCollection:mediaItemCollection]; 

[self dismissModalViewControllerAnimated:YES]; 

    } 


MPMediaItem *mItem = (MPMediaItem *)[userMediaCollection.items objectAtIndex:indexPath.row]; 

    MPMediaItemArtwork *artWork = [mItem valueForProperty:MPMediaItemPropertyArtwork]; 

    cell.imageView.image = [artWork imageWithSize:CGSizeMake(30, 30)]; 

其中userMediaCollection是您MPMediaItemCollection

+1

謝謝Karthikeyan。但是我沒有看到你的代碼與我發佈的代碼不同。實際上是一樣的。我看到的問題是,在與iTunes同步(傳輸購買)之後,此代碼完美工作,但在同步之前無法正常工作。如果我從iPhone購買iTunes中的歌曲,然後啓動我的應用程序,則此代碼不會顯示任何圖像。但是,如果我與iTunes同步,也是如此。不知道當我同步時會發生什麼變化。 –

0

你如何初始化你MPMusicPlayerController?它應該是:

MPMusicPlayerController *player = [MPMusicPlayerController iPodMusicPlayer]; 
1

試試這個......這是工作。

CGSize artworkSize = CGSizeMake(30, 30); 
UIImage *artworkImage; 
MPMediaItemArtwork *artwork = [song valueForProperty: MPMediaItemPropertyArtwork]; 
artworkImage = [artwork imageWithSize:artworkSize]; 

if (artworkImage == nil) { 
    NSLog(@"artwork not available"); 
    artworkImage = [UIImage imageNamed:@"EmptyAlbum.png"]; 
} 

coverArtView.image = artworkImage; 
1

我知道這個問題是有點老了現在,但對任何人發現這一點,這可能幫助:

我抓我的頭在這幾個小時,因爲得到的藝術品正在在我的應用程序中的一個視圖控制器,但不是在我的UITableViewController。我的代碼在兩種情況下看起來都完全一樣(和你的非常相似),除了一件事:

let albumArtImage = albumArt.imageWithSize(cell.imageView.bounds.size) 

尺寸! (對不起,寫在Swift中,但你明白了)。這聽起來很愚蠢,但MPMediaItemArtwork拒絕給我一個小圖像。我從字面上把它改成了更大的尺寸,就像這樣:

let albumArtImage = albumArt.imageWithSize(CGSize(width: 150, height: 150)) 

它工作。無論如何,您可以調整UIImage的大小以適應您的需求。

如果有人發現這個和這個(愚蠢的)解決方案的工作原理,請通過回覆或其他方式告訴我。

+0

這是我注意到的。你還應該提交一個雷達,因爲這看起來像是一個iOS 8的bug。 – Mark

+0

你是如何得到'albumArt'的?它是一個'MPMediaItemArtwork'嗎? – MortalMan

+0

請參閱原問題中的第3行。 – jakeshorty

0

看到回答:https://stackoverflow.com/a/26463261/883413

看起來是一個iOS的錯誤。如果返回的圖像爲零,請嘗試使用圖形大小。

UIImage *image = [artwork imageWithSize:size]; 
if (image == nil) { 
    image = [artwork imageWithSize:artwork.bounds.size]; 
}