С iOS 8 все массивы данных для обложек альбомов от iPad & Устройства iPhone возвращают нулевой массив. Я могу получить обложку альбома или обложку при выводе из локального файла (NSBundle), но любые песни, приобретенные в iTunes или на самом устройстве, возвращаются пустым.Обложка обложки обложки iOS 8
Я обновил до последней версии XCode, последней версии iOS на обоих устройствах, а также iTunes. Я тестировал iPad 4, iPad Air, iPhone 5, iPhone 6. Надеюсь, кто-то знает, что происходит, похоже, это известная ошибка в iOS 8 прямо сейчас. Кроме того, я могу играть в актив и извлекать вещи, такие как имя песни и исполнителя.
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];
}
}
Все изображения обложки возвращаются или не вызываются. Кроме того, вытаскивание обложки из прямого файла, предложенное яблоком, является асинхронным, но, кажется, занимает не менее 10 секунд независимо от того, на каком устройстве я его пробовал. iOS 7 позволил нам напрямую вытащить обложку из mediaItem, и это было мгновенно, я не понимаю, почему они будут использовать эту функцию.
Дальше вы здесь? – newenglander
Вы пробовали MPMediaQuery.songsQuery()? – Aabglov