2014-11-03 32 views
8
IOS 8, iPad & iPhone cihazları albüm teknikte tüm veri dizileri boş bir dizi döner

. Yerel bir dosyadan (NSBundle) çekerken albüm resmi veya kapak resmi alabilirim ancak iTunes'dan veya cihazdan satın alınan şarkılar boş döner.IOS 8 albüm kapak kapağı

Ben son XCode için güncelledik yanı her iki cihazda ve iTunes son iOS. IPad 4, iPad Air, iPhone 5, iPhone 6'da test ettim. Birisi neler olduğunu biliyorsa, şu anda iOS 8'de bilinen bir hata gibi görünüyor. Ayrıca, varlığı oynayabilir ve şarkı adı ve sanatçı gibi şeyler alabilirim.

MPMediaQuery *songQuery = [MPMediaQuery songsQuery]; 
NSArray *itemsFromGenericQuery = [songQuery items]; 
NSMutableArray *songsList = [[NSMutableArray alloc] initWithArray:itemsFromGenericQuery]; 
MPMediaItem *mediaItem = (MPMediaItem *)[songsList objectAtIndex:0]; 

NSURL *url = [mediaItem valueForProperty:MPMediaItemPropertyAssetURL]; 
AVAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil]; 
NSArray *commonArray = [assets commonMetadata]; 

//Test A 
NSArray *albumArray = [AVMetadataItem metadataItemsFromArray:commonArray filteredByIdentifier:AVMetadataIdentifieriTunesMetadataCoverArt]; 
NSLog(@"commonArray = %lu",(unsigned long)[commonArray count]); //Returns 3 
NSLog(@"albumArray has %lu",(unsigned long)[albumArray count]); //Returns 0 or null 

//Test B 
for (AVMetadataItem *metadataItem in asset.commonMetadata) { 

    if ([metadataItem.commonKey isEqualToString:@"artwork"]){ 
     NSDictionary *imageDataDictionary = (NSDictionary *)metadataItem.value; 
     NSData *imageData = [imageDataDictionary objectForKey:@"data"]; 
     UIImage *image = [UIImage imageWithData:imageData]; 
     coverArtImage.image = image; 
    } 
} 

//Test C 
for (AVMetadataItem *item in commonArray) { 

    if ([item.keySpace isEqualToString:AVMetadataKeySpaceiTunes]) { 
     NSData *newImage = [item.value copyWithZone:nil]; 
     coverArtImage.image = [UIImage imageWithData:newImage]; 
    } 

} 

//Test D 
for (AVMetadataItem *item in asset.metadata) { 

    if ([item.commonKey isEqualToString:@"artwork"]){ 
     NSDictionary *imageDataDictionary = (NSDictionary *)item.value; 
     NSData *imageData = [imageDataDictionary objectForKey:@"data"]; 
     UIImage *image = [UIImage imageWithData:imageData]; 
     coverArtImage.image = image; 
    } 

    if ([item.keySpace isEqualToString:AVMetadataKeySpaceiTunes]) { 
     NSData *newImage = [item.value copyWithZone:nil]; 
     coverArtImage.image = [UIImage imageWithData:newImage]; 
    } 

} 

Tüm kapak resmi görüntüleri null veya hiç denilen olsun döner. Ayrıca, kapak resmini elma tarafından önerildiği gibi doğrudan dosyadan çıkarmak asenkrondir, ancak hangi cihazı denediğime bakmadan en az 10 saniye sürüyor. iOS 7, kapak resmini mediaItem'den direkt olarak çekmemize izin verdi ve aniden, neden bu işlevi nerf yaptıklarını anlamıyorum.

+0

daha fazla burada herhangi aldın mı? – newenglander

+0

MPMediaQuery.songsQuery() yöntemini denediniz mi? – Aabglov

cevap

0

Yeni Swift uygulanmasını çalışırken öneriyoruz: Bu indirilen şarkılar fiziksel bir cihaz için boş olmayan bir dizi dönmelidir

let query = MPMediaQuery.songsQuery() 
let mediaCollection = MPMediaItemCollection(items: query.items!) 
print(mediaCollection.items) 

.

1
NSString *queryString = [url query]; 
if (queryString == nil) // shouldn't happen 
    return nil; 

NSArray *components = [queryString componentsSeparatedByString:@"="]; 
if ([components count] < 2) // also shouldn't happen 
    return nil; 

id trackId = [components objectAtIndex:1]; 

MPMediaQuery *query = [[MPMediaQuery alloc] init]; 
[query addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:trackId forProperty:MPMediaItemPropertyPersistentID]]; 

NSArray *items = [query items]; 

[query release]; 

if ([items count] < 1) // still shouldn't happen 
    return nil; 

MPMediaItem* mpitem= [items objectAtIndex:0]; 

MPMediaItemArtwork* mpArt = [mpitem valueForProperty:MPMediaItemPropertyArtwork]; 

UIImage* mpImage = [mpArt imageWithSize:mpArt.bounds.size]; 
+0

Lütfen cevabınıza bir açıklama ekleyin! –