У меня есть объект CoreData с двумя атрибутами. Один называется «позиция», другой называется «positionChange». Оба они являются целыми числами, где атрибут position — текущая позиция, а positionChange — разница между предыдущей позицией и новой позицией. Это означает, что positionChange может быть отрицательным.
Теперь я хотел бы отсортировать по positionChange. Но я бы хотел, чтобы он игнорировал отрицательные значения. В настоящее время я сортирую его по убыванию, что даст результат: 2, 1, 0, -1, -2. Но я ищу, чтобы получить этот результат: 2, -2, 1, -1, 0.
Любые идеи о том, как решить эту проблему с помощью дескрипторов сортировки?
РЕДАКТИРОВАТЬ
У меня есть 2 класса, один называется DataManager, а другой содержит мою категорию NSNumber (positionChange имеет тип NSNumber).
В DataManager у меня есть метод fetchData:, где я выполняю свой запрос на выборку с дескриптором сортировки:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:managedObjectContext];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"positionChange" ascending:NO selector:@selector(comparePositionChange:)];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
Я делаю еще кое-что по запросу, но это не интересно для этой проблемы.
Моя категория NSNumber должна быть точно такой же, как та, которую вы разместили: В .h:
@interface NSNumber (AbsoluteValueSort)
- (NSComparisonResult)comparePositionChange:(NSNumber *)otherNumber;
@end
И в .м:
@implementation NSNumber (AbsoluteValueSort)
- (NSComparisonResult)comparePositionChange:(NSNumber *)otherNumber
{
return [[NSNumber numberWithFloat:fabs([self floatValue])] compare:[NSNumber numberWithFloat:fabs([otherNumber floatValue])]];
}
@end
Когда я вызываю fetchData для своего объекта DataManager, я получаю эту ошибку:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unsupported NSSortDescriptor selector: comparePositionChange:'
Есть идеи, в чем может быть дело? Я включил файл заголовка категории NSNumber в свой класс DataManager.
absolutePositionChange
и заполнить его (в сеттере дляpositionChange
, если он есть) значениемabs(positionChange)
? Вы можете использовать это поле в своем дескрипторе сортировки. - person Simon Whitaker   schedule 30.06.2011