2010-08-16 52 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

相关问题