NSFetchedResultsController:两个具有相同键的排序描述符不起作用。一个下降的部分,另一个上升的行

我使用NSFetchedResultsController来填充TableView。我希望按日期降序排列部分,并按日期升序排序。两者都使用关键字“创建”,并且部分对于sectionNameKeyPath具有transient属性,该属性返回日期字符串,其格式为:从“创建”日期创建的“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

1 答案

在你的第一段代码中,你提供了两个相互矛盾的 NSSortDescriptors ,所以只考虑一个,可能是第一个。

通过创建第二个日期属性仅仅是为了方便,你在数据库中引入了数据重复,这不是一个好主意。 为什么不按照任何顺序对结果进行排序,并且只需在 cellForRowAtIndexPathtitleForHeaderInSection 中反向读取数组?更妙的是,为什么不在你的viewController中使用一个小的私有方法来准备NSDictionary或其他便利的数据结构供以后使用?

0
额外
我已经尝试过这种方法,并在插入/删除行时遇到了一些问题。一切都如预期的那样进行,除了删除了ervery行并且再次添加了一个实体时,TableVIew未被填充。但你是对的。它比数据重复要好,我会再试一次并将结果报告回来。 :)
额外 作者 denrase,