Сортировка изменений положения основных данных с помощью дескрипторов сортировки для iPhone

У меня есть объект 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.

5
задан Anonymous 30 June 2011 в 15:06
поделиться