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

时间:2013-11-22 17:48:56

标签: ios nsfetchedresultscontroller nssortdescriptor

我使用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];
}

1 个答案:

答案 0 :(得分:0)

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

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