iphone - MPMediaQuery 搜索艺术家、专辑和歌曲

标签 iphone objective-c ios mpmediaitem mpmediaquery

如何以与 iOS 音乐应用程序相同的方式搜索 iPod 库?我想进行一般查询以返回每个艺术家、专辑和歌曲的结果。例如,如果我搜索 Kenny Chesney,我希望歌曲查询返回所有 Kenny Chesney 歌曲(以及其中包含 Kenny Chesney 的任何歌曲标题或专辑。)当我进行此查询并为每个属性(歌曲标题、专辑title, artist name), 返回一个空数组。

这里有一些代码可以让您更好地了解我要完成的工作:

MPMediaPropertyPredicate *songPredicate =
[MPMediaPropertyPredicate predicateWithValue:searchText
                                 forProperty:MPMediaItemPropertyTitle
                              comparisonType:MPMediaPredicateComparisonContains];

MPMediaPropertyPredicate *albumPredicate =
[MPMediaPropertyPredicate predicateWithValue:searchText
                                 forProperty:MPMediaItemPropertyAlbumTitle
                              comparisonType:MPMediaPredicateComparisonContains];

MPMediaPropertyPredicate *artistPredicate =
[MPMediaPropertyPredicate predicateWithValue:searchText
                                 forProperty:MPMediaItemPropertyArtist
                              comparisonType:MPMediaPredicateComparisonContains];

MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
[songsQuery addFilterPredicate:songNamePredicate];
[songsQuery addFilterPredicate:artistNamePredicate];
[songsQuery addFilterPredicate:albumNamePredicate];

NSLog(@"%@", [songsQuery items]);

我通过分别对每个谓词运行查询来实现这一点,但这看起来效率很低!

最佳答案

以这种方式组合您的谓词使其成为“AND”关系。这意味着您要查询的歌曲的标题、专辑和名称都与搜索文本匹配。

要实现您正在尝试做的事情,您应该运行 3 个查询并以适当的方式组合结果。

如果你运行:

MPMediaPropertyPredicate *artistPredicate =
[MPMediaPropertyPredicate predicateWithValue:searchText
                                 forProperty:MPMediaItemPropertyArtist
                              comparisonType:MPMediaPredicateComparisonContains];

NSSet *predicates = [NSSet setWithObjects: artistPredicate, nil];

MPMediaQuery *songsQuery =  [[MPMediaQuery alloc] initWithFilterPredicates: predicates];

NSLog(@"%@", [songsQuery items]);

这将为您返回与您的搜索相匹配的艺术家。 对歌曲和专辑也应该这样做。

如果这很慢,您可以一次检索所有媒体并手动过滤:

MPMediaQuery *everything = [[MPMediaQuery alloc] init];

NSLog(@"Logging items from a generic query...");
NSArray *itemsFromGenericQuery = [everything items];
for (MPMediaItem *song in itemsFromGenericQuery) {
    NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
    /* Filter found songs here manually */
}

关于iphone - MPMediaQuery 搜索艺术家、专辑和歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352767/

相关文章:

ios - 在 UITableView 中仅重新加载一个部分标题

ios - 如何在像 Trello 应用程序这样的单元格中具有 UITableView 的 UICollectionView 中进行拖放

ios - 来自 AnyClass 或 dynamicType 的数组,Swift

iphone - AVAudioPlayer 泄漏?

iphone - 如何使 cocos2d Sprite 每秒缩放(以获得脉动效果)?

iphone - 解析要发送的数据的 APNS 提供程序

ios - 使自定义图像尊重 tintColor 属性 iOS

iphone - 在导航 Controller 中默认隐藏 UITableView 搜索栏

ios - iOS 应用程序中不同用户的核心数据

iphone - 带有动画的 UIButton 图像按钮