首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UILocalizedIndexedCollation - MPMediaQuery

UILocalizedIndexedCollation - MPMediaQuery
EN

Stack Overflow用户
提问于 2011-11-20 19:14:16
回答 1查看 1.6K关注 0票数 1

下面的代码用于对歌曲列表进行分区和添加部分。

代码语言:javascript
复制
    query = [MPMediaQuery songsQuery];
    [query addFilterPredicate: artistNamePredicate];            
    NSArray *itemsFromArtistQuery = [query items];  
    self.artist1 = [self partitionObjects:itemsFromArtistQuery collationStringSelector:@selector(title)];

效果很好。然而,当我尝试这样做的时候:

代码语言:javascript
复制
    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”等等,但最终还是这样:

代码语言:javascript
复制
"-[MPConcreteMediaItemCollection title]: unrecognized selector sent to instance"

有人能帮我吗?我已经准备好把头发都扯出来了!

谢谢!

BenBen

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-29 21:30:53

您说得对,问题出在集合部分。collationStringSelector:必须是为传递它的对象返回NSString的方法,在本例中是MPMediaItemCollection的。

(它在第一种情况下是有效的,因为您传递的是响应titleMPMediaItem)。

在这里,我们从artistCollections数组中选择每个MPMediaItemCollection,然后获得一个表示整个集合的MPMediaItem。然后我们可以获得艺术家的名字,并将其添加到一个数组中。

代码语言:javascript
复制
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的形式返回艺术家的名字。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8201133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档