Нужна помощь с сортировкой NSMutableArray с пользовательскими объектами - PullRequest
1 голос
/ 13 сентября 2011

извините, что беспокою вас этим вопросом, но после нескольких часов поиска и просмотра здесь я все еще не могу понять, в чем проблема.

Дело в том, что я создаю NSMutableArray с пользовательскими объектами типа 'Результат поиска'.Класс SearchResult все еще довольно прост:

@interface SearchResult : NSObject {

    NSString *_id;
    NSString *_title;
    NSNumber *_year;
}

@property (nonatomic, copy) NSString *id;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSNumber *year;

@end

вот код, где происходит (плохая) магия:

if (self.sResults == nil) {
    self.sResults = [[NSMutableArray alloc] init];
}
else if ([self.sResults count] > 0){
    [self.sResults removeAllObjects];
}
//JsonConverter uses JsonTouchKit for parsing a json string
JsonConverter *_converter = [[JsonConverter alloc] init];
NSDictionary *parsedResults = [_converter getParsedObjectFromData:results];

for (NSDictionary *movieObj in [parsedResults objectForKey:@"results"]) {
    SearchResult *movie = [_converter newSearchResultObjectFromSearchJsonObject:movieObj];
    [self.sResults addObject:movie];
}
[_converter release];
//sort the results
NSSortDescriptor *desc = [[[NSSortDescriptor alloc] initWithKey:@"year" ascending:NO] autorelease];

NSArray * sortDescriptors = [NSArray arrayWithObject:desc];
[self.sResults sortUsingDescriptors:sortDescriptors];  //<-- HERE!!!
[self.tableView reloadData];

Дело в том, что если я получу только несколько результатовНапример, 3, все в порядке, и массив отсортирован правильно.НО, как только я получу еще несколько результатов, например, 18, приложение вылетает на отмеченной строке с 'SIGABRT' и стеком ниже.Если я проверяю данный адрес "0x5c31470", имея немного знаний о командах GDB, я получаю следующее:

po 0x5c31470 -> 2004 //yes, thats the year it should use for sorting
whatis 0x5c31470 -> type = int

Отслеживание стека:

2011-09-13 12:30: 10.352 VideoCatalogue [1294: 207] - [Длина NSCFNumber]: нераспознанный селектор отправлен в экземпляр 0x5c31470

2011-09-13 12: 30: 10.353 VideoCatalogue [1294: 207] * Завершаетсяприложение из-за необработанного исключения 'NSInvalidArgumentException', причина: '- [длина NSCFNumber]: нераспознанный селектор отправлен в экземпляр 0x5c31470'

Кто-нибудь знает, как я могу решить эту проблему?Большое спасибо!

1 Ответ

0 голосов
/ 13 сентября 2011

Используйте этот подход: Ссылка на класс NSArray Ищите объяснение: sortedArrayUsingFunction:context:

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