我正在使用NSFetchedResultsController來檢索UITableView的數據。它工作正常。現在我需要放置三個按鈕,這些按鈕應該在桌子視圖上觸發不同的排序。爲了實現這一點,我實施了:使用NSFetchedResultsController排序的問題
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
..... .....
)
我必須做出一個很瑣碎的錯誤。 謝謝你的幫助。