[英]Objective-C NSMutableArray: Problem with sorting objects?
我目前有一個名為Station的對象,定義為:
@interface RFStation : NSObject {
NSString *stationID;
NSString *callsign;
NSString *logo;
NSString *frequency;
@end
我也有一個NSMutableArray,其中包含“ Station”對象的列表。 我需要一種通過“ stationState”屬性對這些對象進行排序的方法。
我實現了這種方法:
NSComparisonResult compareCallSign(RFStation *firstStation, RFStation *secondStation, void *context) {
if ([firstStation.stationState compare:secondStation.stationState]){
return NSOrderedAscending;
}else{
return NSOrderedDescending;
}
}
並使用以下命令調用它:
[stationList sortedArrayUsingFunction:compareState context:nil];
[self.tableView reloadData]
(數據已加載到UITableViewController中)
有人可以告訴我為什么我的NSMutableArray沒有得到排序嗎?
-sortedArrayUsingFunction:…
不修改數組。 它只是復制數組,對其進行排序,然后返回新的排序數組。
要就地對可變數組進行排序,請使用-sortUsingFunction:context:
方法。
[stationList sortUsingFunction:compareState context:nil];
[self.tableView reloadData];
順便說一句,
-compare:
方法已經返回NSComparisonResult。 您的功能應實現為
NSComparisonResult compareCallSign(...) { return [firstStation.stationState compare:secondStation.stationState]; }
您可以只使用NSSortDescriptor。
NSSortDescriptor* sd = [NSSortDescriptor sortDescriptorWithKey:@"stationState" ascending:YES]; [stationList sortUsingDescriptors:[NSArray arrayWithObject:sd]]; [self.tableView reloadData];
顯而易見,您已將您的排序方法命名為compareCallSign,並且已將compareState傳遞給sortedArrayUsingFunction
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.