2012-05-03 92 views
0

來自N00B的註釋再次出現。我已經閱讀了很多關於排序數組的內容 - 想嘗試塊方法,但還沒有圍繞它來包裹我的頭。相反,我選擇了描述符方法。我讀了Sort NSArray of custom objects by their NSDate properties和這How to sort an NSMutableArray with custom objects in it?之間的其他人的oodles和oodles。在我的代碼我這樣做:對兩個屬性進行NSArray排序 - int和date

NSString *lastHighScore = @"_highScore"; 
NSString *dateScoreCreated = @"_dateCreated"; 
NSSortDescriptor *highScoreDescriptor = [[[NSSortDescriptor alloc] 
    initWithKey:lastHighScore           
    ascending:NO           
    selector:@selector(localizedCaseInsensitiveCompare:)] autorelease]; 

NSSortDescriptor *dateScoreCreatedDescriptor = [[[NSSortDescriptor alloc] 
             initWithKey:dateScoreCreated 
             ascending:NO 
    selector:@selector(localizedCaseInsensitiveCompare:)] autorelease]; 
NSArray *descriptors = [NSArray arrayWithObjects:highScoreDescriptor, 
dateScoreCreatedDescriptor, nil]; 

NSArray *sortedArray = [[[FlipHighScoreStore sharedStore] allHighScores] sortedArrayUsingDescriptors:descriptors]; 

可悲的是,我得到一個錯誤開始 - 初始元素不是編譯時元素。我查了一下,然後嘗試設置NSSortDescriptor *highScoreDescriptor = nil,但後來我收到一條警告,指出highScoreDescriptor「Type Specifier Missing,default to int」,在這種情況下可以,但對於下一個描述符中的Date對象不是那麼好。 (原來我也收到一個錯誤,說我正在重新定義不同類型的highSoreDescriptor。)

另外,有什麼選擇器可用的列表嗎?我懷疑localizedCaseInsensitiveCompare:是我想使用的,因爲第一個屬性「_highScore」是一個int,第二個「_dateCreated」是一個日期。我在某處讀到默認值是「比較」,所以我可以只把「比較:」? (找到一個答案,我想 - 我可以使用(的intValue)首次描述:

selector:@selector(intValue)] autorelease]; 

多看書讓我覺得,我可以爲日期排序與選擇行做掉完全這是否正確?

最後,如果我說ascending:NO是一樣的下降呢?我猜想,這是的,但是從來沒有編程人都知道,做一個?

難道我包所有這些代碼在它自己的方法?或者我可以(直到後來)把它放在我正在佈置表格的代碼中嗎?

這個項目不是ARC。

回答

1

爲了回答我自己的問題,在朋友的幫助下,我基本上做了兩件事情。首先,我在一個方法之外編寫代碼 - 這就是爲什麼我得到有關初始化元素的所有錯誤。當我添加這個時,我想我很累。

至於實際的排序,我從描述符描述中刪除了選擇器選項,實際發生了排序!

最後,是的,ascending:NO等於降序。

最後一點,必須等到我準備好處理更多的應用程序重構。

相關問題