Я использую 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;}
Кажется, я не нахожу способ заставить работать второй случай (цену). На самом деле, если я использую блок, он учитывает свойство, но не как число, а как строку. Это похоже на то, что код в блоке не был выполнен вообще. На самом деле, если я просто верну NSOrderedSame, он все равно упорядочит его в виде строки. И журнал не выполняется. Если я использую версию @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
..... .....
)
Я, должно быть, делаю очень тривиальную ошибку.
Спасибо за любую помощь.