У меня есть объект CoreData с двумя атрибутами.Один называется «позиция», другой - «positionChange». Оба они являются целыми числами, где атрибут позиции - это текущая позиция, а 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]];
I Я делаю еще кое-что для запроса, но это не интересно для данной проблемы.
Моя категория NSNumber должна быть точно такой же, как та, которую вы разместили: В .h:
@interface NSNumber (AbsoluteValueSort)
- (NSComparisonResult)comparePositionChange:(NSNumber *)otherNumber;
@end
И в .m:
@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.