#iphone #sdk #iphone-sdk-4.1
#iPhone #sdk #iphone-sdk-4.1
Вопрос:
Я пытаюсь отсортировать массив цен от низкого к высокому. У меня это работает, но не так, как я хочу. Короче говоря, сортировщик расставляет числа по порядку следующим образом: 100 10900 200 290
вместо такой сортировки
100
200
290
10900
вот мой код, с помощью которого я это делаю.
-(void)filterPriceLowHigh {
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"ListPrice"
ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [app.vehiclesArrayToDisplay
sortedArrayUsingDescriptors:sortDescriptors];
[app.vehiclesArrayToDisplay removeAllObjects];
[app.vehiclesArrayToDisplay addObjectsFromArray:sortedArray];
}
Кто-нибудь может сказать мне, что мне нужно здесь сделать?
заранее спасибо.
Комментарии:
1. Я не хочу быть капитаном очевидным, но числа сортируются как строки. Вы проверили тип данных этого поля?
2. да, «listprice» представляет собой строку — что мне нужно сделать / преобразовать, чтобы заставить их сортировать так, как я хочу?
Ответ №1:
Создайте дескриптор сортировки следующим образом:
sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"ListPrice"
ascending:YES
comparator:^(id obj1, id obj2) {
return [obj1 compare:obj2 options:NSNumericSearch];
}];
Комментарии:
1. Превосходно!! спасибо за это … я подумал, что мне определенно нужно преобразовать мою строку, но не с помощью этого фрагмента кода. — еще раз спасибо.
2. Кстати, вы можете отсортировать
vehiclesArrayToDisplay
на месте с помощью-sortUsingDescriptors:
. Нет необходимости создавать отдельный NSArray.3. @OleBegemann К сожалению, я не могу использовать SortDescriptor с comparator в CoreData fetchRequest 🙁
Ответ №2:
Сначала вам нужно преобразовать ваши NSString в NSNumbers. Посмотрите документацию для NSNumberFormatter
и метод экземпляра numberFromString
.