2013-04-28 165 views
0

iPod的藝術家有沒有使用像通配符搜索與給定的字母開始,像這樣所有的iPod藝術家姓名的方式:搜索以字母開頭

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

MPMediaQuery *allArtistsQuery = [MPMediaQuery artistsQuery]; 

[allArtistsQuery addFilterPredicate: artistNamePredicate]; 

回答

0

MPMediaPropertyPredicate只支持屬性值等於謂詞值(缺省值)或包含謂詞值,如docs中所述。

也就是說,替代方法是使用包含進行比較,然後使用返回的值篩選結果。

[MPMediaPropertyPredicate predicateWithValue:@"A*" forProperty:MPMediaItemPropertyArtist comparisonType:MPMediaPredicateComparisonContains] 
0

你可以使用上MPMediaQuerycollectionSections屬性來獲取數據的相關部分。對於artistsQuery,每個MPMediaQuerySectiontitle表示藝術家姓名的第一個字母。每個部分還有一個range,然後您可以申請從collections陣列獲取藝術家姓名的子陣列。

這會給你的MPMediaQuerySection爲信一個

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

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

然後採取部分的range屬性來獲取所有藝術家集合的一個子開始以字母一個

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

for (MPMediaItemCollection *artistCollection in filteredCollections) { 
    NSLog(@"%@", [[artistCollection representativeItem] valueForProperty:MPMediaItemPropertyArtist]); 
}