如何搜索iPod的图书馆以同样的方式作为的iOS音乐应用程序?我想进行一般查询,返回每个艺术家,专辑和歌曲的结果。例如,如果我搜索Kenny Chesney,我希望歌曲查询返回所有Kenny Chesney歌曲(以及任何包含Kenny Chesney的歌曲标题或专辑)。当我为每个属性(歌曲标题,专辑标题,艺术家姓名),返回一个空数组。MPMediaQuery搜索艺术家,专辑和歌曲
下面是一些代码,可能会给你什么,我试图完成一个更好的想法:
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]);
我必须通过运行单独的每个谓词查询这方面的工作,但是这似乎很效率低下!
只是提到他,如果你做3个分别查询,你可以用重复的项目结束了。例如。如果专辑被命名为艺术家等 – 2013-02-06 18:03:35
@relikd是的,这是我的地方。我有三个不同的查询添加到三个数组 - 但有重复的 - 这显然是一个问题。 – daidai
你可以在将它们与'if([arr indexOfObject:song] == NSNotFound){[arr addObject:song]; }'。但是这并不是非常有效,特别是在大型阵列上。这是因为在添加新项目之前,indexOfObject:向所有项目发送了一个isEqual:消息。 – 2013-02-07 14:03:57