在NSSortDescriptor中使用KVC

时间:2013-10-05 12:33:03

标签: objective-c core-data nsfetchrequest nssortdescriptor key-value-coding

我需要根据存储在NSString中的整数对一堆对象进行排序。

我知道这是一个解决方案并且有效:

NSSortDescriptor *mySortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"from" ascending: YES comparator:^(id obj1, id obj2)
{
   if ([obj1 integerValue] > [obj2 integerValue])
   {
       return (NSComparisonResult) NSOrderedDescending;
   }

   if ([obj1 integerValue] < [obj2 integerValue])
   {
       return (NSComparisonResult) NSOrderedAscending;
   }

   return (NSComparisonResult) NSOrderedSame;
}];

self.myObjects = [[self.data allObjects] sortedArrayUsingDescriptors: @[mySortDescriptor]];

我的问题是,为什么我不能使用KVO,它看起来更干净,例如:

NSSortDescriptor *mySortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"from.integerValue" ascending: YES];

然后将其传递给我的NSFetchRequest

使用此代码,在21之前出现200。

1 个答案:

答案 0 :(得分:2)

基于(基于SQLite)的核心数据获取请求的排序描述符只能使用持久属性和一组有限的内置选择器,但不能使用像Objective-C这样的方法 integerValue

在这种情况下,integerValue似乎只是被忽略,因此from值 分类为字符串,而不是数字

如果你不能将属性类型更改为“整数”(这也可以解决问题) 然后您可以使用特殊选择器作为解决方法:

NSSortDescriptor *mySortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"from"
                                  ascending:YES
                                   selector:@selector(localizedStandardCompare:)];

localizedStandardCompare是“类似Finder的排序”并对包含数字的字符串进行排序 根据他们的数值。