我有一个具有两个属性的 CoreData 实体。一个称为“position”,另一个称为“positionChange”。它们都是整数,其中position属性是当前位置,positionChange是前一个位置和新位置之间的差值。这意味着positionChange 可以为负。
现在我想按positionChange排序。但我希望它忽略负值。目前我正在对其进行降序排序,这将给出结果:2、1、0、-1、-2。
但我正在寻找的是得到这个结果:2, -2, 1, -1, 0。
关于如何使用排序描述符解决这个问题有什么想法吗?
EDIT
我有 2 个类,一个称为 DataManager,另一个包含我的 NSNumber 类别(positionChange 的类型为 NSNumber)。
在 DataManager 中,我有一个名为“fetchData:”的方法,我在其中使用排序描述符执行获取请求:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:managedObjectContext];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"positionChange" ascending:NO selector:@selector(comparePositionChange:)];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
我正在根据请求做更多的事情,但这对于这个问题来说并不有趣。
我的 NSNumber 类别应该与您发布的类别完全相同:
在.h中:
@interface NSNumber (AbsoluteValueSort)
- (NSComparisonResult)comparePositionChange:(NSNumber *)otherNumber;
@end
在 .m 中:
@implementation NSNumber (AbsoluteValueSort)
- (NSComparisonResult)comparePositionChange:(NSNumber *)otherNumber
{
return [[NSNumber numberWithFloat:fabs([self floatValue])] compare:[NSNumber numberWithFloat:fabs([otherNumber floatValue])]];
}
@end
当我在 DataManager 对象上调用 fetchData 时,出现以下错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unsupported NSSortDescriptor selector: comparePositionChange:'
对可能发生的情况有什么想法吗?我已将 NSNumber 类别头文件包含在我的 DataManager 类中。