來自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。