2010-08-16 50 views
0

我目前已經定義所謂的站的對象爲:Objective-C NSMutableArray:排序對象時出現問題?

@interface RFStation : NSObject { 

    NSString *stationID; 
    NSString *callsign; 
    NSString *logo; 
    NSString *frequency; 
@end 

我也有含有一個NSMutableArray「站」的對象的列表。 我需要有一個方法來通過'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是未被排序?

回答

2

-sortedArrayUsingFunction:…不修改數組。它只是複製數組,對其進行排序,然後返回新排序的數組。

要就地排序可變數組,請使用-sortUsingFunction:context:方法。

[stationList sortUsingFunction:compareState context:nil]; 
[self.tableView reloadData]; 

順便說一句,

  1. -compare:的方法已經返回一個NSComparisonResult。你的功能應該實現爲

    NSComparisonResult compareCallSign(...) { 
        return [firstStation.stationState compare:secondStation.stationState]; 
    } 
    
  2. 你可以使用一個NSSortDescriptor。

    NSSortDescriptor* sd = [NSSortDescriptor sortDescriptorWithKey:@"stationState" 
                    ascending:YES]; 
    [stationList sortUsingDescriptors:[NSArray arrayWithObject:sd]]; 
    [self.tableView reloadData]; 
    
+0

哇!你的第二個解決方案太棒了。謝謝你,太多了。現在只有當有辦法給解決方案+3。 – unicornherder 2010-08-16 07:20:52

0

好東西很明顯,你命名你的排序方法compareCallSign,你已經通過compareState到sortedArrayUsingFunction

相關問題