1

有没有办法使用通配符之类的东西来搜索以给定字母开头的所有 iPod 艺术家姓名,如下所示:

MPMediaPropertyPredicate *artistNamePredicate = [MPMediaPropertyPredicate predicateWithValue:@"A*" forProperty:MPMediaItemPropertyArtist];

MPMediaQuery *allArtistsQuery = [MPMediaQuery artistsQuery];

[allArtistsQuery addFilterPredicate: artistNamePredicate];
4

2 回答 2

0

MPMediaPropertyPredicate仅支持属性值等于谓词值(默认值)或包含谓词值,如文档中所述。

话虽如此,另一种方法是使用包含比较,然后使用返回值过滤结果。

[MPMediaPropertyPredicate predicateWithValue:@"A*" forProperty:MPMediaItemPropertyArtist comparisonType:MPMediaPredicateComparisonContains]
于 2013-04-28T22:21:29.277 回答
0

您可以使用该collectionSections属性MPMediaQuery来获取数据的相关部分。对于artistsQuerytitle每个的MPMediaQuerySection代表艺术家姓名的第一个字母。每个部分还有一个range,然后您可以应用它从数组中获取艺术家姓名的子collections数组。

这将为您MPMediaQuerySection提供字母A

MPMediaQuery *allArtistsQuery = [MPMediaQuery artistsQuery];
NSArray *collectionSections = allArtistsQuery.collectionSections;
NSPredicate *artistPredicate = [NSPredicate predicateWithFormat:@"title == %@", @"A"];

MPMediaQuerySection *artistSection = [[collectionSections filteredArrayUsingPredicate:artistPredicate] lastObject];

然后获取该部分的属性以获取以字母Arange开头的所有艺术家收藏的子数组:

NSArray *collections = allArtistsQuery.collections;
NSRange arraySlice = artistSection.range;
NSArray *filteredCollections = [collections subarrayWithRange:arraySlice];

for (MPMediaItemCollection *artistCollection in filteredCollections) {
    NSLog(@"%@", [[artistCollection representativeItem] valueForProperty:MPMediaItemPropertyArtist]);
}
于 2013-04-30T01:44:25.463 回答