0

我无法使用 NSSortDescriptor 对 NSNumber 进行排序。无论出于何种原因,它都不会按正确的顺序排序。我究竟做错了什么?

- (NSNumber *)sortNumber {

NSNumber *sum = [NSNumber numberWithFloat:([self.capacity floatValue] / [self.availability floatValue])];

return sum;
}

它在 xcdataModel 中定义为 Int32 并由此类调用进行排序。

- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController == nil) {
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
    [fetchRequest setReturnsObjectsAsFaults:NO];  
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext]];
    NSArray *sortDescriptors = nil; 
} if ([fetchSectioningControl selectedSegmentIndex] == 0) {
        sortDescriptors = [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"sortNumber" ascending:YES selector:@selector(compare:)] autorelease]];
}
[fetchRequest setSortDescriptors:sortDescriptors];

编辑:是的,在寒冷的日子里,这需要更多的解释。我将尝试解释该项目。这是一个 CoreData 应用程序,值“容量”和“可用性”源自使用 SAX 解析 XML 文件并将它们附加到被定义为字符串的托管对象模型,最初它们在 XML 中应该是数字。

然后将它们定义在一个已经进行上述计算并附加到相同对象模型的类中(如果上面的代码是正确的,那么这可能就是问题所在?)。所有这些都是为了获得我想用来对 TableView 进行排序的百分比值。(顺便说一句,我意识到他们需要交换,哎呀)第二段代码是使用 NSFetchResultsController 和 ManagedObjectContext 发生这种情况的地方。我知道这一点有效,因为我还通过设置为 if selectedSegmentIndex == 0 等的其他属性对该列表进行排序。它们都正确排序。

我希望这更有意义。

4

1 回答 1

0
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortNumber" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

[请求 setSortDescriptors:sortDescriptors];

您可以NSSortDescriptor在不调用比较方法的情况下使用。它会按照您想要的顺序自行排序。

于 2014-08-06T13:18:22.757 回答