下面的代码用于对歌曲列表进行分区和添加部分。
query = [MPMediaQuery songsQuery];
[query addFilterPredicate: artistNamePredicate];
NSArray *itemsFromArtistQuery = [query items];
self.artist1 = [self partitionObjects:itemsFromArtistQuery collationStringSelector:@selector(title)];效果很好。然而,当我尝试这样做的时候:
query = [MPMediaQuery albumsQuery]; //same with playlistsQuery, artistsQuery, genresQuery
[query addFilterPredicate: artistNamePredicate];
NSArray *itemsFromArtistQuery = [query collections];
self.artist1 = [self partitionObjects:itemsFromArtistQuery collationStringSelector:@selector(title)];每次我都会收到一个SIGABRT错误。我将其归因于代码的“集合”部分,因为这是整个代码块中唯一的区别。我试着把“标题”改成"name“、"albumTitle”、"playlist“、"genre”等等,但最终还是这样:
"-[MPConcreteMediaItemCollection title]: unrecognized selector sent to instance"有人能帮我吗?我已经准备好把头发都扯出来了!
谢谢!
BenBen
发布于 2011-12-29 21:30:53
您说得对,问题出在集合部分。collationStringSelector:必须是为传递它的对象返回NSString的方法,在本例中是MPMediaItemCollection的。
(它在第一种情况下是有效的,因为您传递的是响应title的MPMediaItem)。
在这里,我们从artistCollections数组中选择每个MPMediaItemCollection,然后获得一个表示整个集合的MPMediaItem。然后我们可以获得艺术家的名字,并将其添加到一个数组中。
query = [MPMediaQuery albumsQuery]; //same with playlistsQuery, artistsQuery, genresQuery
[query addFilterPredicate: artistNamePredicate];
NSArray *artistCollections = [query collections];
NSMutableArray *artists = [NSMutableArray array];
for (MPMediaItemCollection *artist in artistCollections) {
// get a single MPMediaItem that represents the collection
MPMediaItem *representativeItem = [artist representativeItem];
NSString *artistName = [representativeItem valueForProperty:MPMediaItemPropertyArtist];
[artists addObject:artistName];
}
self.artist1 = [self partitionObjects:artists collationStringSelector:@selector(self)];现在我们传递了一个NSString数组,所以我们将collationStringSelector:设置为self,这将以NSString的形式返回艺术家的名字。
https://stackoverflow.com/questions/8201133
复制相似问题