我目前有一个名为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没有排序吗?
答案 0 :(得分:2)
-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];
答案 1 :(得分:0)
很明显,你已经将你的排序方法命名为compareCallSign,并且你已经将compareState传递给sortedArrayUsingFunction