在索引 501 处获取的对象有一个乱序的部分名称“应用物理学杂志”。对象必须按部分名称排序'

Posted

技术标签:

【中文标题】在索引 501 处获取的对象有一个乱序的部分名称“应用物理学杂志”。对象必须按部分名称排序\'【英文标题】:The fetched object at index 501 has an out of order section name 'JOURNAL OF APPLIED PHYSICS. Objects must be sorted by section name'在索引 501 处获取的对象有一个乱序的部分名称“应用物理学杂志”。对象必须按部分名称排序' 【发布时间】:2011-05-30 20:00:04 【问题描述】:

我有一个带有期刊部分名称的文章数据库。一篇是“Journal of Applied Physics”,另一篇是“JOURNAL OF APPLIED PHYSICS”。当我使用

[[NSSortDescriptor alloc] initWithKey:@"Journal" ascending:YES elector:@selector(caseInsensitiveCompare:)]

要获取数据,它会给我错误消息。

The fetched object at index 501 has an out of order section name 'JOURNAL OF APPLIED PHYSICS. Objects must be sorted by section name'

我已经在使用不区分大小写的比较,为什么这不起作用?帮忙?

======= 用于获取数据的代码 =======

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Article" 
                                          inManagedObjectContext:SharedMOC];

[fetchRequest setEntity:entity];

NSSortDescriptor *journalSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Journal" 
                                                                     ascending:ascending 
                                                                      selector:@selector(caseInsensitiveCompare:)];

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:journalSortDescriptor,  nil];

[fetchRequest setSortDescriptors:sortDescriptors];

NSFetchedResultsController *a = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                                                    managedObjectContext:SharedMOC 
                                                                      sectionNameKeyPath:[self selectedSortSection]
                                                                               cacheName:cacheName];

【问题讨论】:

Q1:如何创建获取请求? (请输入代码) Q2:@"Journal" 是您排序依据的属性的名称吗? 谢谢。在那种情况下,Journal 是 NSString 吗?例如,如果Journal 是另一个实体,则您的密钥路径应该是Journal.name 是的,Journal 是一个 NSString。当使用其他键路径进行排序时,获取工作正常,只是使用它给出错误消息的 Journal。我认为这是因为它有两篇文章,期刊相同,但大小写不同。 酷。你的[self getSortDescriptor] 方法......它返回什么?我的意思是,我看到您创建了一个 NSSortDescriptor 并将其添加到 sortDescriptors 数组中...但是您从未明确将该数组设置为 fetchRequest... 除非在 getSortDescriptor 中发生类似的事情? 【参考方案1】:

我的直觉是这样说的,而不是:

[fetchRequest setSortDescriptors:[self getSortDescriptor]];

你应该写:

[fetchRequest setSortDescriptors:sortDescriptors];

【讨论】:

对不起。我确实有一个 [self getSortDescriptor] 方法,只是我在此处发布时为了简化而修改了代码,并错误地保留了未修改的那部分代码。就像我在评论中说的那样,排序与其他关键路径(如作者、年份等)一起工作得很好。只是在有这种大小写差异的情况下使用 Journal。 好的。您是使用 NSFetchedResultsController 中的sectionIndexTitles,还是将其子类化以覆盖该方法?来自doc:如果要自定义创建部分和索引标题,则创建此类的子类。您覆盖 sectionIndexTitleForSectionName: 如果您希望部分索引标题不是部分名称的大写首字母。如果您希望索引标题不是通过在所有已知部分上调用 sectionIndexTitleForSectionName: 创建的数组,则覆盖 sectionIndexTitles。

以上是关于在索引 501 处获取的对象有一个乱序的部分名称“应用物理学杂志”。对象必须按部分名称排序'的主要内容,如果未能解决你的问题,请参考以下文章

奇怪的问题 - “索引 x 处的获取对象的部分名称乱序”

更安静的purrr :: map2用于名称乱序的列表

NSFetchedResultsController“乱序部分名称”

数据库使用order by排序乱序的问题

fastjson存在乱序的问题

您如何处理消息队列中乱序的消息?