1

ワイルドカード文字のようなものを使用して、次のような特定の文字で始まるすべての iPod アーティスト名を検索する方法はありますか?

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

MPMediaQuery *allArtistsQuery = [MPMediaQuery artistsQuery];

[allArtistsQuery addFilterPredicate: artistNamePredicate];
4

2 に答える 2

0

MPMediaPropertyPredicateは、 docsに記載されているように、プロパティ値が述語値 (デフォルト) と等しいか、述語値を含むことのみをサポートします。

そうは言っても、別の方法は、contains比較を使用してから、返された値で結果をフィルタリングすることです。

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

collectionSectionsプロパティ onを使用してMPMediaQuery、データの関連セクションを取得できます。のartistsQueryはアーティスト名の頭文字titleMPMediaQuerySection表します。各セクションには もあり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 に答える