2014-09-23 7 views
5

Die UIImage "Bild" ist immer leer ("null"), obwohl die Abdeckung in der Musik-App von Apple angezeigt wird. in iOS 7 funktioniert es gut, aber mit iOS 8 bekomme ich keine Deckung.MPMediaItemArtwork ist null, während Abdeckung in iTunes verfügbar ist

Was ist falsch an meinem Code oder was hat sich in iOS 8 geändert?

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    AlbumCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AlbumCell"]; 
    MPMediaItemCollection *song = self.songsList[indexPath.row]; 

    cell.albumName.text = [[song representativeItem] valueForProperty: MPMediaItemPropertyAlbumTitle]; 

    cell.albumArtist.text = [[song representativeItem] valueForProperty:MPMediaItemPropertyAlbumArtist]; 


    CGSize artworkImageViewSize = CGSizeMake(100, 100); 
    MPMediaItemArtwork *artwork = [song valueForProperty:MPMediaItemPropertyArtwork]; 
    UIImage *image = [artwork imageWithSize:artworkImageViewSize]; 

    NSLog(@"-------------------"); 
    NSLog(@"%@",[[song representativeItem] valueForProperty: MPMediaItemPropertyAlbumTitle]); 
    NSLog(@"%@",image); 

    if (artwork) { 

     cell.cover.image = image; 
    } 
    else 
    { 
     cell.cover.image = [UIImage imageNamed:@"nocover.png"]; 
    } 

    return cell; 
} 

Antwort

0

Ihr Code sieht gut aus. Ich habe den gleichen Code, um Artwork zu bekommen, und es funktioniert für mich auf iOS 8. Bist du sicher, dass der Gegenstand tatsächlich ein Kunstwerk hat? Spielen Sie dieses Lied in der Musik-App - Artwork?

+0

ja, wenn ich das gleiche Lied oder ein Album in der Musik-App spiele, gibt die Grafik. – Meins

+0

Artwork! = Nil ABER image == nil gibt es ein Problem mit imageWithSize:? – Meins

+0

Ich habe es in einem neuen Projekt versucht, es funktioniert nicht, hier das Projekt http://www.file-upload.net/download-9572664/TestCover.zip.html – Meins

2

Ich habe das Problem gefunden.

es ist

CGSize artworkImageViewSize = CGSizeMake(100, 100); 

folgende Arbeiten:

CGSize artworkImageViewSize = CGSizeMake(120, 120); 

oder

CGSize artworkImageViewSize = CGSizeMake(60, 60); 

alles, was um 3 Werke aufgeteilt werden kann.

+0

Ich denke, Sie finden es ist ein Vielfaches , beginnend bei 60. 60, 120, 240, 360 (?), 480 .... etc. 90 würde nicht funktionieren, 360 auch nicht. – topLayoutGuide

10

Ab iOS 8, MPMediaItem 's Selektor imageWithSize:(CGSize)size scheint nicht zu garantieren, dass es ein Bild zurückgibt. Wenn kein Bild an der gewünschten Größe zurückgegeben wird, rufen Sie es erneut mit der Größe der Grafik bounds Eigenschaft:

MPMediaItemArtwork *artwork = [self valueForProperty:MPMediaItemPropertyArtwork]; 
UIImage *image = [artwork imageWithSize:size]; 
if (image == nil) { 
    image = [artwork imageWithSize:artwork.bounds.size]; 
} 
+1

Dies sollte die akzeptierte Antwort sein. – werm098

Verwandte Themen