0

我需要根据存储在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

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

4

1 回答 1

2

(基于 SQLite 的)Core Data 获取请求的排序描述符只能使用持久属性和一组有限的内置选择器,但不能使用 Objective-C 方法,如 integerValue.

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

如果您无法将属性类型更改为“整数”(这也可以解决问题),那么您可以使用特殊的选择器作为解决方法:

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

localizedStandardCompare是“类似查找器的排序”,并根据数字值对包含数字的字符串进行排序。

于 2013-10-05T13:13:26.857 回答