Objective-C NSMutableArray:排序对象有问题吗?

时间:2010-08-16 07:04:10

标签: iphone objective-c sorting nsmutablearray

我目前有一个名为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没有排序吗?

2 个答案:

答案 0 :(得分: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];
    

答案 1 :(得分:0)

很明显,你已经将你的排序方法命名为compareCallSign,并且你已经将compareState传递给sortedArrayUsingFunction