我将NSFetchRequests's
sortDescriptor
设置为只包含一个NSSortDescriptor
的数组:
[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]
然后,我创建了一个NSFetchResultsController
,其@"name"
也是sectionKeyNamePath
。
当语言环境为英语时,带有变音符号的字母与其普通字母一起排序。例如,出于分类的目的,“Å”被视为“A”。问题是,当获取结果被分解为多个部分时,不会考虑这一点,因此每次结果序列从“A”变为“Å”或反之时,都会添加一个新的部分。因此,NSFetchResultsController's
sectionIndexTitles返回一个数组
("\U00c5", A, "\U00c5", A, "\U00c5", A, B, C, …)
并且我的UITableView
问题:我怎样才能使用以字母排序的名称只生成一个部分呢?
从用于排序的基础数据中删除变音符号不是一种选择,因为其他一些语言环境将“A”和“Å”视为单独的字母,“Å”在字母表中的“Z”之后排序。
带有自定义比较器的NSSortDescriptor
不是一个选项,因为Core Data只能使用一组固定的内置比较器。 (这是因为它们被转换为基础数据库的SQL。)
答案 0 :(得分:0)
此SO question and answer可能会占据关键......
[NSSortDescriptor sortDescriptorWithKey:@"name"
ascending:YES
comparator:(NSComparator)^(NSString *key1, NSString *key2) {
return [key1 compare:key2
options:NSDiacriticInsensitiveSearch | NSCaseInsensitiveSearch];
}];
虽然我无法测试这台ATM,但从理论上说这应该可行。
比较器应该遍历sortDescriptorWithKey:@"name"
并将每一个与另一个进行比较,以返回一组包含大小写和变音符号不敏感的字母。
希望这有帮助。