Iphone 使用函数“一次查询两首或多首歌曲”;addFilterPredicate";按MPMediaItemPropertyPersistentID
我的应用程序在启动时自动加载音乐播放列表。为了做到这一点,我将歌曲IDIphone 使用函数“一次查询两首或多首歌曲”;addFilterPredicate";按MPMediaItemPropertyPersistentID,iphone,cocoa-touch,mpmediaquery,Iphone,Cocoa Touch,Mpmediaquery,我的应用程序在启动时自动加载音乐播放列表。为了做到这一点,我将歌曲IDMPMediaItemPropertyPersistentID存储到数据库中,并在下次启动应用程序时加载歌曲。主要代码如下: MPMediaQuery *MPMediaSongQuery = [MPMediaQuery songsQuery]; MPMediaPropertyPredicate *iPodMusicSongPredicateiPodMusicSongPredicate = [MPMediaPropertyPr
MPMediaItemPropertyPersistentID
存储到数据库中,并在下次启动应用程序时加载歌曲。主要代码如下:
MPMediaQuery *MPMediaSongQuery = [MPMediaQuery songsQuery];
MPMediaPropertyPredicate *iPodMusicSongPredicateiPodMusicSongPredicate = [MPMediaPropertyPredicate
predicateWithValue:[NSNumber numberWithUnsignedLongLong: songID]
forProperty:MPMediaItemPropertyPersistentID
comparisonType:MPMediaPredicateComparisonEqualTo];
[MPMediaSongQuery addFilterPredicate:iPodMusicSongPredicate];
NSArray *collections = MPMediaSongQuery.collections;
代码一首接一首地加载歌曲。我的问题是:在使用函数
addFilterPredicate:
时,是否有任何方法可以通过MPMediaItemPropertyTypersTestId
一次查询两首或多首歌曲?谢谢。如果您使用多个addFilterPredicate,它们将与逻辑AND组合。因此,您只能减少第一个查询的结果,而不能扩展它。因此,不允许对同一属性使用多个AddFilterPredicate。事实上,结果是未定义的,并且很可能会以空集合结束。您要查找的是相同属性与逻辑OR的组合。您可以实现以下伪代码中描述的效果:
MPMediaQuery *MPMediaSongQuery = [MPMediaQuery songsQuery];
NSMutableArray *collections = [[NSMutableArray alloc] initWithCapacity:1];
for (int i=0; i < songIDCount; i++) {
MPMediaPropertyPredicate *iPodMusicSongPredicateiPodMusicSongPredicate = [MPMediaPropertyPredicate
predicateWithValue:[NSNumber numberWithUnsignedLongLong: songID[i]]
forProperty:MPMediaItemPropertyPersistentID
comparisonType:MPMediaPredicateComparisonEqualTo];
[MPMediaSongQuery addFilterPredicate:iPodMusicSongPredicate];
[collections addObjectsFromArray:MPMediaSongQuery.collections];
[MPMediaSongQuery removeFilterPredicate:iPodMusicSongPredicate];
}
MPMediaQuery*MPMediaSongQuery=[MPMediaQuery-songsQuery];
NSMutableArray*集合=[[NSMutableArray alloc]initWithCapacity:1];
对于(int i=0;i
…如果使用多个addFilterPredicate,则它们将与逻辑AND组合。因此,您只能减少第一个查询的结果,而不能扩展它。因此,不允许对同一属性使用多个AddFilterPredicate。事实上,结果是未定义的,并且很可能会以空集合结束。您要查找的是相同属性与逻辑OR的组合。您可以实现以下伪代码中描述的效果:
MPMediaQuery *MPMediaSongQuery = [MPMediaQuery songsQuery];
NSMutableArray *collections = [[NSMutableArray alloc] initWithCapacity:1];
for (int i=0; i < songIDCount; i++) {
MPMediaPropertyPredicate *iPodMusicSongPredicateiPodMusicSongPredicate = [MPMediaPropertyPredicate
predicateWithValue:[NSNumber numberWithUnsignedLongLong: songID[i]]
forProperty:MPMediaItemPropertyPersistentID
comparisonType:MPMediaPredicateComparisonEqualTo];
[MPMediaSongQuery addFilterPredicate:iPodMusicSongPredicate];
[collections addObjectsFromArray:MPMediaSongQuery.collections];
[MPMediaSongQuery removeFilterPredicate:iPodMusicSongPredicate];
}
MPMediaQuery*MPMediaSongQuery=[MPMediaQuery-songsQuery];
NSMutableArray*集合=[[NSMutableArray alloc]initWithCapacity:1];
对于(int i=0;i
…关键是只对音乐库进行一次查询。您的代码仍然请求i次…关键是只对音乐库进行一次查询。您的代码仍然请求i次。。。