我试图从iPod中获取所有用户的播放列表,并按播放列表的ID对它们进行排序。
以下是我目前所做的:
MPMediaQuery *allPlaylistsQuery = [MPMediaQuery playlistsQuery];
NSArray *allPlaylists = [allPlaylistsQuery collections];
NSArray *sortedPlaylists = [allPlaylists sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:MPMediaPlaylistPropertyPersistentID ascending:YES]]];
但是我得到exception:
'[<MPConcreteMediaPlaylist 0x14f38590> valueForUndefinedKey:]: this class is not key value coding-compliant for the key playlistPersistentID.'
那么最简单(也是最有效)的排序是什么呢?
异常的原因是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];
}];