繁体   English   中英

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

[英]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];

顺便说一句,

  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]; 

显而易见,您已将您的排序方法命名为compareCallSign,并且已将compareState传递给sortedArrayUsingFunction

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM