2

私は次のものを持っています:

MPMediaPropertyPredicate *titlePredicate = [MPMediaPropertyPredicate predicateWithValue:textString 
                                                                            forProperty:MPMediaItemPropertyTitle
                                                                         comparisonType:MPMediaPredicateComparisonContains];

NSSet *predicateSet = [NSSet setWithObject:titlePredicate];
MPMediaQuery *searchQuery = [[MPMediaQuery alloc] initWithFilterPredicates:predicateSet];
NSArray *itemsFromTextQuery = [searchQuery items];

 for (MPMediaItem *song in itemsFromTextQuery) 
 {
     [arrayOfSongItems addObject:song];
 }

これはうまく機能しますが、トラックのタイトルのみを検索しました。タイトル、アーティスト、アルバム名の結果を返したいと思います。

4

2 に答える 2

5

これは私のために働く:

MPMediaQuery *searchQuery = [[MPMediaQuery alloc] init];
NSPredicate *test = [NSPredicate predicateWithFormat:@"title contains[cd] %@ OR albumTitle contains[cd] %@ OR artist contains[cd] %@", searchString, searchString, searchString];
NSArray *filteredArray = [[searchQuery items] filteredArrayUsingPredicate:test];

//NSLog(@"%@", [filteredArray valueForKeyPath:@"title"]);

for (MPMediaItem *song in filteredArray) 
{
    [arrayOfSongItems addObject:song];
}

私は基本的にメディアクエリからすべてのアイテムを取得した後にフィルタリングします。私の解決策は、最初からクエリをフィルタリングするよりも優れているとは思いませんが、3 回個別に検索するよりは間違いなく優れています。または、配列を複数回反復します。

于 2013-02-06T15:25:12.837 に答える
4

次のコードを試してください

 MPMediaQuery* query = [MPMediaQuery albumsQuery];

[query addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:self.strArtist forProperty:MPMediaItemPropertyArtist]]

[query addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:self.strTitle forProperty:MPMediaItemPropertyAlbumTitle]];
于 2012-06-04T08:47:18.800 に答える