gpt4 book ai didi

ios8 - iOS 8 专辑封面

转载 作者:行者123 更新时间:2023-12-02 21:16:50 25 4
gpt4 key购买 nike

自 iOS 8 起,iPad 和 iPhone 设备中专辑封面的所有数据数组都会返回空数组。从本地文件(NSBundle)中提取时,我可以获得专辑封面或封面艺术,但从 iTunes 或设备本身购买的任何歌曲都会返回空。

我已经更新到最新的 XCode、两台设备上的最新 iOS 以及 iTunes。我已经在 iPad 4、iPad Air、iPhone 5、iPhone 6 上进行了测试。希望有人知道发生了什么,这似乎是 iOS 8 中的一个已知错误。此外,我还可以播放 Assets 并检索歌曲名称和艺术家等信息。

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

}

所有封面艺术图像都返回 null 或永远不会被调用。此外,按照苹果的建议,从直接文件中提取封面艺术是异步的,但无论我在什么设备上尝试过,似乎至少需要 10 秒。 iOS 7 允许我们直接从 mediaItem 中提取封面艺术,而且是瞬时的,我不明白为什么他们会削弱这个功能。

最佳答案

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];

关于ios8 - iOS 8 专辑封面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26707618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com