我是Objective C和iOS編程的新手,並且已經進入了一些超出我的頭腦的水域。任何幫助表示讚賞。使用多個對象集合中的第一個項目創建對象數組?
我有一個問題,排序在UITableView中使用的數組。基本上,我想查詢一組相冊,並根據用戶設置按字母順序或按日期(升序和降序)進行排序。首先,我綜合了一些全局數組,並mediaquery專輯:
@synthesize allSongs, arrayForTableView;
MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
[songsQuery setGroupingType: MPMediaGroupingAlbum];
arrayForTableView = [songsQuery collections];
allSongs = [songsQuery items];
到目前爲止,一切都很好。相冊按照字母順序排序。 allSongs數組用於別的一些播放功能。所以,現在,我在檢測的設置,以及添加排序由「年」屬性:
@synthesize allSongs, arrayForTableView;
MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
[songsQuery setGroupingType: MPMediaGroupingAlbum];
NSArray *allAlbums = [songsQuery collections];
allSongs = [songsQuery items];
if ([[[NSUserDefaults standardUserDefaults] stringForKey:@"SortAlbumsMethod"] isEqualToString:@"0"]) {
arrayForTableView = [songsQuery collections];
} else if ([[[NSUserDefaults standardUserDefaults] stringForKey:@"SortAlbumsMethod"] isEqualToString:@"1"]) {
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"year"
ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
arrayForTableView = [allAlbums sortedArrayUsingDescriptors:sortDescriptors];
} else {
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"year"
ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
arrayForTableView = [allAlbums sortedArrayUsingDescriptors:sortDescriptors];
}
這是我遇到的問題。以上不起作用,因爲每個集合(專輯)沒有年份屬性。如果我將「allAlbums」替換爲「allSongs」,則代碼正常運行。 除了,我現在每個歌都有一個條目。顯示的標籤信息僅與專輯相關,並且導航基於AlbumPersistentID,所以一切都很好,我只是有太多重複的條目(顯示完全相同,因爲歌曲名稱未顯示)。
看起來很明顯的解決方案就是創建一個數組,讓我們用「allAlbums」中的每個集合中的單個項目稱之爲「albumRepresentatives」,然後在排序描述符中使用它。每個項目實際上是一首歌而不是一張專輯,但外觀和功能仍然有效。理想情況下,我想比較每張專輯中的所有歌曲,選擇具有最高「年」屬性的歌曲並將其添加到「專輯代表」中。 B計劃將簡單地在索引0處爲每個專輯收集歌曲。
問題是,做這是超出我的能力在這一點上。任何幫助將不勝感激!
謝謝。我最初嘗試了一套,但它不起作用,因爲來自同一專輯的多首歌曲不是真正的重複。它們看起來是因爲顯示的屬性在它們之間是共同的。你的第二個選項似乎有點凌駕於我的頭上,但我會開始玩這個。當它們被返回時,是否有可能將每個「最新歌曲」添加到可變數組中?因爲那個數組就是我所需要的。感謝幫助! – 2014-08-27 13:24:05
當然,你可以根據自己的喜好使用它:)。我個人會爲此功能創建一個函數並從中返回數組。 – tsr 2014-08-28 07:49:19