【发布时间】:2013-12-15 20:57:09
【问题描述】:
我正在尝试将一系列 NSManagedObjects 分组。每个部分代表一天内的 4 个小时。
- (NSString *)sectionIdentifier
{
// Create and cache the section identifier on demand.
[self willAccessValueForKey:@"sectionIdentifier"];
NSString *tmp = [self primitiveSectionIdentifier];
[self didAccessValueForKey:@"sectionIdentifier"];
if (!tmp)
{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit) fromDate:[self created]];
tmp = [NSString stringWithFormat:@"%.0f %d %d %d", round(components.hour % 4), components.day, components.month, components.year];
[self setPrimitiveSectionIdentifier:tmp];
}
return tmp;
}
在上面的代码中,在 NSManagedObject 中找到,瞬态属性sectionIdentifier 返回一个字符串,其中包含它所在的时间段(4 小时)、它的创建日期、月份和年份。
但是,虽然 NSFetchedResultController 的 fetchRequest 的排序描述符设置为按照创建日期的顺序对结果进行排序(最新的对象在底部,最旧的在顶部),但由于没有指定部分标识符,因此获取请求失败正确订购。
- (NSFetchedResultsController *) fetchedResultsController {
if (!_fetchedResultsController) {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"PSSpace" inManagedObjectContext:self.managedObjectContext]];
[fetchRequest setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"created" ascending:YES]]];
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"sectionIdentifier" cacheName:nil];
[_fetchedResultsController setDelegate:self];
}
return _fetchedResultsController;
}
CoreData: 错误: (NSFetchedResultsController) 在索引 10 处获取的对象的节名乱序为“1 14 12 2013。对象必须按节名排序”
请您告诉我如何解决订购问题?
谢谢。
【问题讨论】:
标签: core-data uitableview nsfetchedresultscontroller nsfetchrequest