ユーザーの iPhone ライブラリにあるすべてのビデオ アイテムのリストを取得し、最初にアルバム名で並べ替え、次にトラック番号で並べ替えようとしています (これにより、すべてのテレビ番組とポッドキャストが適切な場所に配置されるという考えに基づいています)。ショー/エピソード順)。MPMediaItems
問題は、そのような 2 つのパラメーターで並べ替える方法がわかりません。
現在、次のようにクエリを設定しています。
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
2次元で使用する方法はありますか?
これを行う最善の方法は何ですか?