NSFetchedResultsController的节名称与pipe理对象值不匹配
我正在使用一个NSFetchedResultsController来填充一个UITableView结果从一个中等规模的核心数据存储约1500个实体。 结果控制器是相当标准的 – 对于这种设置,潜在错误的一些“热点”是不正确的。
- 在同一个(主)线程上创build的托pipe对象上下文与其上的一样
- 没有使用caching(因为sorting频繁变化)
- sectionNameKeyPath用于将结果拆分成多个部分
然而,我的部分结果非常奇怪。 例如,考虑用于设置节标题视图的标题的方法:
- (NSString *)titleForHeaderInSection:(NSInteger)section { id <NSFetchedResultsSectionInfo> sectionInfo = [[self.resultsController sections] objectAtIndex:section]; return [sectionInfo name]; // <------- Stopped at breakpoint here }
我已经停在指定的行使用断点,并使用GDB,检查以下内容:
(gdb) po [[self resultsController] sectionNameKeyPath] reviewDateString (gdb) print section $11 = 1 (gdb) print (int) [sectionInfo numberOfObjects] $12 = 4 (gdb) po [sectionInfo name] Wednesday, September 8th 2010 (gdb) po [[[sectionInfo objects] objectAtIndex:0] valueForKey:@"reviewDateString"] Sunday, February 13th 2011 (gdb) po [[[sectionInfo objects] objectAtIndex:1] valueForKey:@"reviewDateString"] Sunday, February 13th 2011 (gdb) po [[[sectionInfo objects] objectAtIndex:2] valueForKey:@"reviewDateString"] Sunday, February 13th 2011 (gdb) po [[[sectionInfo objects] objectAtIndex:3] valueForKey:@"reviewDateString"] Sunday, February 13th 2011
这个问题应该是显而易见的 – 为什么[sectionInfo name]不匹配部分中每个被pipe理对象的sectionNameKeyPath的值? 该部分中的对象似乎被正确分组,部分名称只是没有正确设置。
如果你看看这个结果,结果会更奇怪:
(gdb) po [[self resultsController] indexPathForObject:(id)[[sectionInfo objects] objectAtIndex:0]] <NSIndexPath 0x6615660> 2 indexes [459, 4294966310]
现在显然,从上面,返回的NSIndexPath应该是[1,0],而不是这个虚假的值。
我完全难倒了。 有人有主意吗? 如果您需要更多的信息,我会看这个问题。
[编辑1]
关于我的NSFetchedResultsController设置的一件奇怪的事情是,我重新创build(释放和分配/初始化一个新的)结果控制器响应UISegmentedControl的select更改。 这是为了更改提取请求和sectionNameKeyPath的sortDescriptors,以便整体sorting更改。
[编辑2]
resultsController方法只是我正在使用的NSFetchedResultsController的属性访问器,由@synthesize生成。
部分名称的期望值已经给出 – 部分名称应该等于我在“po [sectionInfo name]”下方显示的@“reviewDateString”键(它是sectionNameKeyPath)的值,所以对于这种情况他们应该是“2011年2月13日星期天”。
您可能需要修正您的sectionNameKey在提取。
如果此关键path与fetchRequest中第一个sorting描述符指定的关键path不相同,则它们必须生成相同的相关sorting。 例如,fetchRequest中的第一个sorting描述符可以指定持久属性的关键字; sectionNameKeyPath可以为从持久性属性派生的瞬态属性指定一个键。
- 如何正确修剪由NSFetchedResultsController引入的对象图?
- 崩溃NSManagedObject版本:“objc_msgSend()select器名称:_queueForDealloc”
- 核心数据谓词:谓词未实现的SQL生成
- + entityForName:nil不是合法的NSManagedObjectContext参数search实体名称“帐户”
- 如何在iOS中从详细视图访问主表的视图
- iOS的Swift的 – 如何存储arrays与核心数据?
- iOS:如何使用下载的CSV填充CoreData
- CoreData Stack适用于Swift中的iOS 9和iOS 10
- 我应该在哪里保存我想长期保存的数据和文件,以及如何防止iCloud将其备份