对核心属性长度排序核心数据结果

时间:2012-03-24 09:08:10

标签: objective-c core-data nssortdescriptor

所以基本上就像标题所说有一种方法可以使用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 个答案:

答案 0 :(得分:2)

您可以使用自定义比较器编写排序描述符。积木让它变得非常简单!

[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 :(得分:1)

只需将长度用作排序的键,然后使用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]);