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