У меня есть сущность CoreData с двумя атрибутами. Один называется «position», другой называется «positionChange». Оба они являются целыми числами, где атрибут position - это текущая позиция, а positionChange - это разница между предыдущей позицией и новой позицией. Это означает, что positionChange может быть отрицательным.
Теперь я бы хотел отсортировать по positionChange. Но я хотел бы, чтобы это игнорировало отрицательные ценности. В данный момент сортирую по убыванию, что даст результат: 2, 1, 0, -1, -2.
Но я хочу получить такой результат: 2, -2, 1, -1, 0.
Есть идеи, как решить эту проблему с помощью дескрипторов сортировки?
EDIT
У меня есть 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.