按ID排序ipod播放列表

时间:2014-07-20 12:04:12

标签: ios objective-c nssortdescriptor mpmediaquery

我试图从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.'  

那么最简单(又有效)的原因是什么呢?

1 个答案:

答案 0 :(得分: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];
}];