我想要獲取用戶iPhone庫中所有視頻項目的列表,並按照專輯名稱先排序,然後按軌道編號排序這將把所有電視節目和播客放入適當的節目/劇集順序中)。事情是,我無法找出一種方法來排序MPMediaItems
這樣的兩個參數。查詢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
嗎?
這樣做的最好方法是什麼?
按照'albumTitle'單獨排序的單詞,但按'albumTrackNumber'排序崩潰,錯誤爲:終止應用程序,由於未捕獲的異常'NSUnknownKeyException',原因:'[ valueForUndefinedKey:]:該類不是鍵符合關鍵字TrackNumber.''的值編碼 –
Nerrolken