У меня есть поле, полное идентификаторов от третьей стороны. Идентификаторы - это числа, но записанные в БД в виде строки.
Я хочу отсортировать выборку, отсортированную по этому идентификатору, по значению целого числа. Поэтому я добавляю это NSSortDescriptor
к NSFetchRequest
.
NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init];
[numFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSSortDescriptor *sortBy = [[NSSortDescriptor alloc] initWithKey:@"someId" ascending:YES comparator:^(id a, id b) {
return [[numFormatter numberFromString:a] compare:[numFormatter numberFromString:b]];
}];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortBy]];
Но я получаю следующие результаты. Они по-прежнему сортируются как строка в алфавитном порядке.
730275292
73900038
730172867
7350727
830138437
835164
837287901
8338804
930274
9324376
Что я не понимаю в использовании этого блока компаратора?
РЕДАКТИРОВАТЬ 1 мая 2012 г. 9 :20:00 по восточному поясному времени
Чтобы проверить, используется ли блок компаратора, я попробовал следующее для сортировки на основе длины поля.
NSSortDescriptor *sortBy = [[NSSortDescriptor alloc] initWithKey:@"fbId" ascending:YES comparator:^(id a, id b) {
if ([a length] < [b length]) {
return NSOrderedAscending;
} else if ([a length] > [b length]) {
return NSOrderedDescending;
} else {
return NSOrderedSame;
}
}];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortBy]];
Я все еще получаю результаты, отсортированные по алфавиту! Так что это заставляет меня думать, что блок компаратора даже не используется.
716164250
726354466
73900038
739600038
7450727
810138437
801164
801375346
8213997