小编Ano*_*ous的帖子

使用iPhone的排序描述符对核心数据位置更改进行排序

我有一个具有两个属性的CoreData实体.一个称为"位置",另一个称为"positionChange".它们都是整数,其中position属性是当前位置,positionChange是前一个位置和新位置之间的差值.这意味着positionChange可以是负数.

现在我想按positionChange排序.但我希望它忽视负面价值观.目前我正在将它降序排序,这将得到结果:2,1,0,-1,-2.但我正在寻找的是得到这个结果:2,-2,1,-1,0.

关于如何使用排序描述符解决这个问题的任何想法?


编辑

我有两个类,一个叫做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]];
Run Code Online (Sandbox Code Playgroud)

我正在为请求做更多的事情,但这对此问题并不重要.

我的NSNumber类别应该与您发布的类别完全相同:在.h中:

@interface NSNumber (AbsoluteValueSort)
- (NSComparisonResult)comparePositionChange:(NSNumber *)otherNumber;
@end
Run Code Online (Sandbox Code Playgroud)

而在.m:

@implementation NSNumber (AbsoluteValueSort)

- (NSComparisonResult)comparePositionChange:(NSNumber *)otherNumber
{
    return [[NSNumber numberWithFloat:fabs([self floatValue])] compare:[NSNumber numberWithFloat:fabs([otherNumber floatValue])]];
}

@end
Run Code Online (Sandbox Code Playgroud)

当我在我的DataManager对象上调用fetchData时,我收到此错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unsupported NSSortDescriptor selector: comparePositionChange:'
Run Code Online (Sandbox Code Playgroud)

可能是什么情况的任何想法?我在我的DataManager类中包含了我的NSNumber类头文件.

sorting iphone core-data objective-c nssortdescriptor

5
推荐指数
2
解决办法
2482
查看次数