我使用NSFetchedResultsController来填充TableView。我希望按日期降序对各部分进行排序,并按行按日期排序。两者都使用键'creation',section具有sectionNameKeyPath的瞬态属性,该属性返回日期的字符串,其格式为:“Today,Yesterday,20.11.2013,19.11.2013,...”从“创建”日期创建。但是,行始终按第一个排序描述符的顺序排序。这种方法有误吗?
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Exercise"];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creation" ascending:NO],
[NSSortDescriptor sortDescriptorWithKey:@"creation" ascending:YES]];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.context
sectionNameKeyPath:@"localizedCreationDate"
cacheName:nil];
我很感激任何提供的帮助! BR
更新
以上方法无效。 :)我通过将第二个日期保存为当天开始的属性,按顺序降序来解决它。这也用作sectionNameKeyPath。此外,对于节标题标题,使用了localizedCreationDate。
- (void)setuptFetchedResultsController
{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"DNALoggedExercise"];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDayDate" ascending:NO],
[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.context
sectionNameKeyPath:@"creationDayDate"
cacheName:nil];
}
答案 0 :(得分:0)
在你的第一段代码中,你给出了两个相互矛盾的NSSortDescriptors
,所以只考虑了一个,可能是第一个。
通过创建第二个日期属性只是为了方便,您在数据库中引入了数据重复,这不是一个好主意。
为什么不按照任何顺序对结果进行排序,只需在cellForRowAtIndexPath
或titleForHeaderInSection
中反向读取数组?更好的是,为什么不在viewController中使用一个小的私有方法来准备NSDictionary或任何其他便利数据结构供以后使用?