Objective-C NSMutableArray: проблема с сортировкой объектов? - PullRequest
0 голосов
/ 16 августа 2010

В настоящее время у меня есть объект с именем 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 ]

2 голосов
/ 16 августа 2010

-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];
    
0 голосов
/ 16 августа 2010

что-то очевидное, вы назвали свой метод сортировки compareCallSign и передали CompareState в sortedArrayUsingFunction

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...