0

我试图从 iPod 中获取所有用户的播放列表并按播放列表的 ID 对它们进行排序。
这是我到目前为止所做的:

MPMediaQuery *allPlaylistsQuery = [MPMediaQuery playlistsQuery];
NSArray *allPlaylists = [allPlaylistsQuery collections];
NSArray *sortedPlaylists = [allPlaylists sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:MPMediaPlaylistPropertyPersistentID ascending:YES]]];  

但我得到例外:

'[<MPConcreteMediaPlaylist 0x14f38590> valueForUndefinedKey:]: this class is not key value coding-compliant for the key playlistPersistentID.'  

那么为什么要进行这种排序最简单(和有效)是什么?

4

1 回答 1

0

异常的原因是MPMediaItem使用该方法valueForProperty:来查询属性值,而不是valueForKey:使其符合 KVC。为什么不支持valueForKey:对我来说有点神秘,因为它会使课程更加有用,例如我认为您在问题中提供的代码会起作用。

未经测试:

MPMediaQuery *allPlaylistsQuery = [MPMediaQuery playlistsQuery];
NSArray *allPlaylists = [allPlaylistsQuery collections];
NSArray *sorted = [allPlaylists sortedArrayUsingComparator:^(id obj1, id obj2) {
    NSNumber *id1 = [(MPMediaItem *)obj1 valueForProperty:MPMediaItemPropertyPersistentID];
    NSNumber *id2 = [(MPMediaItem *)obj2 valueForProperty:MPMediaItemPropertyPersistentID];
    return [id1 compare:id2];
}];
于 2014-07-20T12:14:57.330 回答