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