【发布时间】:2014-06-15 05:53:43
【问题描述】:
CoreData: 错误: (NSFetchedResultsController) 在索引 72 处获取的对象有一个乱序的部分名称 'อั.对象必须按部分名称排序'
我正在使用以下代码按书名字段排序,并将书名的第一个大写字母显示为 UITableViewController 中的部分名称。
该代码可以在除泰语之外的所有语言中完美运行。我在互联网上读到有特殊的非美国字符导致此类问题(即Æ),但我还没有找到任何解决方案。
请参阅The fetched object at index [i] has an out of order section name 'å 上的 gschandler 回复
FRC的代码是
NSFetchedResultsController *aFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"titleFirstLetter"
cacheName:nil];
firstLetter的代码是:
- (NSString *)titleFirstLetter {
// support UTF-16:
NSString* val = [self.title substringWithRange:[self.title rangeOfComposedCharacterSequenceAtIndex:0]];
return [val uppercaseString];
}
有什么建议吗?
【问题讨论】:
-
我有完全相同的问题,除了泰语以外的所有语言都可以。您是否找到任何解决方法?是 gschandler 的方法最好吗?
-
我最初使用 gschandler 的方法,因为我认为泰语是唯一有问题的语言......但是,当我发现德语中的某些字符也导致了这个问题时,我决定解决这个问题是必须。我的解决方案只是在 sqlite 数据库中添加一个“titleFirstLetter”字段,而不是在运行时获取该字段。这样,所有的排序工作都由 sqlite 数据库完成,并且不会出现冲突。就数据库设计而言,这当然不是最干净的解决方案,但这种解决方法非常有效。
-
啊...现在我记得了,我在另一个使用 CoreData 的应用程序中遇到了一个类似的问题,并在运行时创建值,这最终导致了场外工作。似乎是最安全的方法。谢谢! :-)
-
在我的情况下,我按字母顺序排序,但一个字段有一个不可见的换行符,导致为其计算错误的 sectionIndex。希望这对某人有所帮助。
标签: ios iphone core-data nsfetchedresultscontroller