2011-07-07 1 views
4

J'ai le code suivant pour obtenir le UIImage de MPMediaItemPropertyArtWork pour afficher le coverArt dans ma vue. Cependant, lorsque j'essaie d'extraire l'UIImage de l'illustration, j'obtiens une illustration non-NULL de mediaItem, elle renvoie NULL et je ne vois rien dans mon UIImageView. Toute aide est la bienvenue.Impossible d'obtenir le UIImage de MPMediaItemPropertyArtWork

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

Avez-vous trouvé des solutions? – Bartu

+0

Copie possible de [MPMediaItemArtwork est null alors que la couverture est disponible dans iTunes] (http://stackoverflow.com/questions/25998621/mpmediaitemartwork-is-null-while-cover-is-available-in-itunes) –

Répondre

3

Essayez avec ceci - utilisez un UItableview pour afficher les détails de l'album.

déclare 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)]; 

où userMediaCollection est votre MPMediaItemCollection

+1

Merci Karthikeyan. Mais je ne vois pas comment votre code est différent de celui que j'ai posté. C'est en fait la même chose. Le problème que je vois est que ce code fonctionne parfaitement après la synchronisation (transfert des achats) avec iTunes, mais pas avant la synchronisation. Si j'achète une chanson d'iTunes depuis mon iPhone puis que je lance mon application, ce code n'affiche aucune image. Mais la même chose fonctionne si je synchronise avec iTunes. Je ne suis pas sûr de ce qui est changé quand je synchronise. –

0

Comment vous vous initialisez MPMusicPlayerController? Il devrait être:

MPMusicPlayerController *player = [MPMusicPlayerController iPodMusicPlayer]; 
1

essayez ceci ... c'est du travail.

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

Je sais que cette question est un peu vieux maintenant, mais pour toute personne qui trouve cela, cela pourrait aider:

Je grattais ma tête sur ce pendant quelques heures, parce qu'obtenir l'œuvre travaillait dans un contrôleur de vue dans mon application mais pas dans mon UITableViewController. Mon code était exactement le même dans les deux cas (et très semblable à la vôtre) sauf pour une chose:

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

la taille! (Désolé d'avoir écrit ceci dans Swift, mais vous avez l'idée). Cela semble stupide, mais le MPMediaItemArtwork a refusé de me donner une petite image. Je l'ai littéralement juste changé à une plus grande taille, comme ceci:

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

et cela a fonctionné. Vous pouvez redimensionner le UIImage pour répondre à vos besoins plus tard de toute façon.

Si quelqu'un trouve cela et que cette solution (stupide) fonctionne, s'il vous plaît laissez-moi savoir via une réponse ou quelque chose.

+0

C'est quelque chose que j'ai remarqué aussi. Vous devriez également déposer un radar, car cela semble être un bogue iOS 8. – Mark

+0

Comment avez-vous obtenu 'albumArt'? Est-ce un 'MPMediaItemArtwork'? – MortalMan

+0

Voir la ligne 3 dans la question originale. – jakeshorty

0

Voir la réponse: https://stackoverflow.com/a/26463261/883413

semble être un bug iOS. Si l'image renvoyée est nulle, essayez plutôt d'utiliser la taille de l'illustration.

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