2014-09-23 26 views
5

"Obraz" UIImage jest zawsze pusty ("null"), chociaż okładka jest wyświetlana w aplikacji muzycznej przez Apple. w iOS 7 działa dobrze, ale z iOS 8 nie dostaję żadnej ochrony.MPMediaItemArtwork ma wartość null, natomiast okładka jest dostępna w iTunes

Co jest nie tak z moim kodem lub co zmieniło się w iOS 8?

-(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; 
} 

Odpowiedz

0

Twój kod wygląda dobrze. Mam taki sam kod do tworzenia grafiki i działa on dla mnie na iOS 8. Czy jesteś PEWNY, że przedmiot rzeczywiście ma dzieło sztuki? Odtwórz tę piosenkę w aplikacji muzycznej - grafika?

+0

tak, gdy gram tego samego utworu lub albumu w aplikacji muzycznej, tam dzieła sztuki. – Meins

+0

artwork! = Nil BUT image == zero czy jest jakiś problem z imageWithSize:? – Meins

+0

Próbowałem go w nowym projekcie, to nie działa, tutaj projekt http://www.file-upload.net/download-9572664/TestCover.zip.html – Meins

2

Znalazłem problem.

its

CGSize artworkImageViewSize = CGSizeMake(100, 100); 

następujące prace:

CGSize artworkImageViewSize = CGSizeMake(120, 120); 

lub

CGSize artworkImageViewSize = CGSizeMake(60, 60); 

wszystko, co może być podzielona przez 3 prace.

+0

Myślę, że znajdziesz to wielokrotności , zaczynając od 60. 60, 120, 240, 360 (?), 480 .... itd. 90 nie działałoby, a 360 też nie. – topLayoutGuide

10

Od wersji iOS 8, MPMediaItem wybierak imageWithSize:(CGSize)size wydaje się nie gwarantować, że zwróci obraz. Jeśli zdjęcie nie zostanie zwrócony w żądanej wielkości, nazywają go ponownie wielkości grafiki bounds nieruchomości:

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

To powinna być zaakceptowana odpowiedź. – werm098