我正在尝试获取用户 iPhone 库中所有视频项目的列表,并首先按专辑名称对它们进行排序,然后按曲目编号(认为这会将所有电视节目和播客放在适当的位置)节目/剧集顺序)。问题是,我想不出一种方法来按这样MPMediaItems
的两个参数进行排序。
现在,我这样设置查询:
MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInteger:MPMediaTypeAnyVideo] forProperty:MPMediaItemPropertyMediaType];
MPMediaQuery *query = [[MPMediaQuery alloc] init];
[query addFilterPredicate:predicate];
NSArray *arrayMediaItems = [[NSArray alloc] init];
arrayMediaItems = [query items];
然后我这样排序:
NSArray *sortedArray = [arrayMediaItems sortedArrayUsingComparator:^(id a, id b) {
NSNumber *first = [(MPMediaItem*)a valueForProperty:MPMediaItemPropertyAlbumTitle];
NSNumber *second = [(MPMediaItem*)b valueForProperty:MPMediaItemPropertyAlbumTitle];
return [first compare:second];
}];
事情是,这会返回一个列表,其中所有专辑(阅读:节目)的顺序都正确,但其中的剧集只是按字母顺序排列的,这显然是不正确的。我尝试这样做:
NSSortDescriptor *sortAlbum = [[NSSortDescriptor alloc] initWithKey:@"MPMediaItemPropertyAlbumTitle" ascending:YES];
NSSortDescriptor *sortTrackNum = [[NSSortDescriptor alloc] initWithKey:@"MPMediaItemPropertyAlbumTrackNumber" ascending:YES];
NSArray *sortDescriptors = @[sortAlbum, sortTrackNum];
sortedArray = [arrayMediaItems sortedArrayUsingDescriptors:sortDescriptors];
但我得到一个错误:this class is not key value coding-compliant for the key MPMediaItemPropertyAlbumTitle
。据我了解,这是因为我试图按属性而不是键进行排序。
所以我的问题是:一个如何MPMediaItems
按多个因素排序?我可以对最初的结果进行排序(例如按曲目编号而不是按标题的字母顺序),然后仅按专辑名称对其进行排序吗?有没有办法使用NSSortDescriptor
或sortedArrayUsingComparator
二维?
最好的方法是什么?