ios - UILocalizedIndexedCollat​​ion - MPMediaQuery

标签 ios ios4 mpmediaitem ios5 mpmediaquery

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

    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 错误。我将其归因于代码的“集合”部分,因为这是整个 block 中唯一的区别。我试过将“标题”更改为“名称”、“专辑标题”、“播放列表”、“流派”等等,但我仍然以:

"-[MPConcreteMediaItemCollection title]: unrecognized selector sent to instance"

有人可以帮我吗?我准备好扯掉我的头发了!

谢谢!

奔奔

最佳答案

您是对的,问题出在集合部分。 collat​​ionStringSelector: 必须是一种方法,它为您传递给它的对象返回一个 NSString,在本例中为 MPMediaItemCollection

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

在这里,我们从 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 数组,所以我们将 collat​​ionStringSelector: 设置为 self,这将返回艺术家姓名作为NSString.

关于ios - UILocalizedIndexedCollat​​ion - MPMediaQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8201133/

相关文章:

ios - 字段 `lyrics` 对于 swift 中当前播放歌曲的 MPMediaItem 是空的,ios 12+

iphone - 我无法在 UITabBar 中重新排列 UITabBarItem

ios - 将图像数组转换为 MP4 文件时遇到问题

iphone - 我可以取消“applicationDidEnterBackground”方法吗?

iphone - 为 iPhone UILabel 创建文本描边

ios - 如何设置 MPNowPlayingInfoCenter 的图稿图像

iphone - 标签边框内的间距

iphone - 将触摸事件传递给 iOS 状态栏

multithreading - iOS4 & 背景 [UIImage setImage :]