Xcode 使用NSFetchedResultsController排序时出现问题

Xcode 使用NSFetchedResultsController排序时出现问题,xcode,sorting,nssortdescriptor,nsfetchedresultscontroller,Xcode,Sorting,Nssortdescriptor,Nsfetchedresultscontroller,我正在使用NSFetchedResultsController为UITableView检索数据。它很好用。现在,我需要放置三个按钮,它们将触发表视图上的不同排序。为此,我实施了: switch (selectedOrder) { case 0: sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; break; case 1:

我正在使用NSFetchedResultsController为UITableView检索数据。它很好用。现在,我需要放置三个按钮,它们将触发表视图上的不同排序。为此,我实施了:

switch (selectedOrder) {
    case 0:
        sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
        break;
    case 1: 
        /*
        sortDescriptor = [[NSSortDescriptor alloc] initWithKey: @"price"  ascending: NO 
                                                    comparator: ^(id obj1, id obj2) {
                                                        NSLog(@"Test");
                                                        return numSort(obj1, obj2, nil);
                                                        //return NSOrderedSame;
                                                    }];
         */
        sortDescriptor = [[NSSortDescriptor alloc] initWithKey: @"price" 
                                                     ascending: NO 
                                                      selector:@selector(compareAsFloats:)];

        break;
    ...
    default:
        break;}
我似乎找不到办法让第二个案例(价格)起作用。事实上,如果我使用块,它会考虑属性,但作为字符串,而不是数字。这就像块中的代码根本没有执行一样。事实上,如果我只是返回一个DeredName,它仍然将其作为字符串排序。并且不执行日志。如果使用@selector(compareAsFloats:)版本,其中该方法是在NSString类别上定义的,则会出现运行时错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unsupported NSSortDescriptor selector: compareAsFloats:'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x014df5a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x01889313 objc_exception_throw + 44
    2   CoreData                            0x01211266 -[NSSQLGenerator newSQLStatementForFetchRequest:ignoreInheritance:countOnly:nestingLevel:] + 1270
    3   CoreData                            0x011494d8 -[NSSQLAdapter _newSelectStatementWithFetchRequest:ignoreInheritance:] + 488
    4   CoreData                            0x011492e1 -[NSSQLAdapter newSelectStatementWithFetchRequest:] + 49
    5   CoreData                            0x0114918e -[NSSQLCore newRowsForFetchPlan:] + 430
    .....   .....
)
我一定犯了一个很小的错误。
感谢您的帮助。

我完成这项工作的方法是在按钮的iAction中定义排序,并在@property中创建NSFetchRequest*请求。在按钮操作中,我执行以下操作:

self.request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"distance" ascending:YES]];
[self.fetchedResultsController performFetch:&error];
[tableView reloadData];

你不能那样做。如果将SQLite后端用于核心数据,则排序工作在SQL级别。
不能使用自定义比较选择器或块。您必须仅按实体的属性进行排序

为什么不将价格保存为十进制数(即a),这样就不会出现双精度和浮点精度问题

然后,您可以使用price对数据进行排序