在核心数据获取请求中,我想对结果不区分大小写进行排序。 所以我编码:
NSSortDescriptor *sortDescriptor =
[[NSSortDescriptor alloc] initWithKey:@"name"
ascending:YES
comparator:^(id s1, id s2)
{
return [s1 localizedCaseInsensitiveCompare:s2];
}];
但不幸的是结果仍然是: B U a c y z。
但Block看起来没问题,因为如果我用该代码对结果进行排序:
NSMutableArray* names = ......
[names sortUsingComparator:^(id s1, id s2)
{
return [s1 localizedCaseInsensitiveCompare:s2];
}];
结果是: a B c U y z。
我的错在哪里?
答案 0 :(得分:3)
我找到了一个不使用Block的解决方案 - 但是使用了选择器:
NSSortDescriptor *sortDescriptor =
[[NSSortDescriptor alloc] initWithKey:@"question"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)];
如果“name”是核心数据实体的字符串属性,则它运行良好。
答案 1 :(得分:0)
如果您的结果集很大并且您正在通过它进行分页(比如使用NSFetchedResultsController
或NSFetchRequest
的{{1}}和fetchLimit
),那么您不需要使用fetchOffset
的{{1}}因为CoreData将获取所有对象并将其排序到数据库之外。
相反,请存储要对其进行排序的属性的小写副本,例如NSSortDescriptor
,然后使用initWithKey:ascending:selector:
的{{1}}搜索该属性。