Objective c 按字符串属性长度对核心数据结果进行排序

Objective c 按字符串属性长度对核心数据结果进行排序,objective-c,core-data,nssortdescriptor,Objective C,Core Data,Nssortdescriptor,因此,基本上就像标题所说的,有没有一种方法可以使用NSSortDescriptor根据特定属性(即字符串)长度和字符数对NSFetchRequest的结果进行排序 比如说 结果顺序如下: A AA AAA AAAA 等等 谢谢大家!我搞不懂这个 这是我尝试的排序描述符: NSSortDescriptor* sort = [NSSortDescriptor sortDescriptorWithKey:@"food_name" ascending:YES comparator:^(id obj1,

因此,基本上就像标题所说的,有没有一种方法可以使用
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;
}];
NSSortDescriptor*sort=[NSSortDescriptor sortdescriptor with key:@“food_name”升序:是比较器:^(id obj1,id obj2){
NSInteger len1=[obj1长度];
NSInteger len2=[obj2长度];
如果(len1len2)返回下移;
返回指定名称;
}];

我在其中放了一个断点,它似乎没有被调用。

只需使用长度作为排序的键,并将其添加到


可以使用自定义比较器编写排序描述符。积木真的很容易

[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;
 }];
[NSSortDescriptor SORTDescriptor WithKey:@“stringName”
上升:是的
比较器:^(id obj1,id obj2){
NSInteger len1=[obj1长度];
NSInteger len2=[obj2长度];
如果(len1len2)返回下移;
返回指定名称;
}];

您可能应该选择一个更好的示例。这就是按字母顺序排序时得到的确切排序顺序。;-)我很确定这是一个很明显的问题,因为我一次也没有按字母顺序说这个词,我想我可以这样做,你需要获取数据,然后在内存中排序;通过为获取请求提供正确的排序描述符,让核心数据对其进行排序会更有效。该代码只是创建排序描述符的一个示例,我提供的setSortDescriptors:链接演示了如何将排序描述符添加到NSFetchRequest。@benzado旧答案,但您的答案不适用于CoreData***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是:“不支持的NSSortDescriptor(不支持比较器块)”,这正是我试图做的,但由于某些原因它无法工作。这就是我正在使用的(检查我原来帖子中的编辑)
[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;
 }];