簡體   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