Сортировать результаты Core Data по длине строковых атрибутов - PullRequest
1 голос
/ 24 марта 2012

так в принципе, как в заголовке сказано, есть ли способ использовать NSSortDescriptor для сортировки результатов NSFetchRequest на основе длины определенных атрибутов (то есть строки) по количеству символов?

Например Порядок результатов будет:

A
AA
AAA
AAAA

и т. Д.

Большое спасибо всем! Я не могу понять это

Это дескриптор сортировки, который я пробовал:

NSSortDescriptor* sort = [NSSortDescriptor sortDescriptorWithKey:@"food_name" ascending:YES comparator:^(id obj1, id obj2) {
    NSInteger len1 = [obj1 length];
    NSInteger len2 = [obj2 length];
    if (len1 < len2) return NSOrderedAscending;
    if (len1 > len2) return NSOrderedDescending;
    return NSOrderedSame;
}];

Я установил в нем точку останова, и она, кажется, не вызывается.

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

Вы можете написать дескриптор сортировки с помощью специального компаратора. Блоки делают это действительно легко!

[NSSortDescriptor sortDescriptorWithKey:@"stringName"
 ascending:YES
 comparator:^(id obj1, id obj2) {
    NSInteger len1 = [obj1 length];
    NSInteger len2 = [obj2 length];
    if (len1 < len2) return NSOrderedAscending;
    if (len1 > len2) return NSOrderedDescending;
    return NSOrderedSame;
 }];
1 голос
/ 24 марта 2012

Просто используйте длину в качестве ключа для сортировки и добавьте ее с помощью setSortDescriptors:

NSArray *example = [NSArray arrayWithObjects:@"AAAA", @"BBB", @"CC", @"D", nil];

NSSortDescriptor *lengthSorter = [NSSortDescriptor sortDescriptorWithKey:@"length" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:lengthSorter];

NSLog(@"%@", example);
NSLog(@"%@", [example sortedArrayUsingDescriptors:sortDescriptors]);
...