NSFetchedResultsController,按照TWO标准排序

我有一个显示音乐家专辑的表格视图。 每个部分都是一个专辑,每一行都是一个专辑。 我需要按发布日期排序的专辑/部分,然后按标题排序。 我正在从Core Data中抽取音轨,如下所示:

fetchRequest = [[NSFetchRequest alloc] init];
...
fetchRequest.sortDescriptors = [NSArray arrayWithObjects:
                                [NSSortDescriptor sortDescriptorWithKey:@"album.releaseDate" ascending:YES],
                                [NSSortDescriptor sortDescriptorWithKey:@"album.title" ascending:YES],
                                [NSSortDescriptor sortDescriptorWithKey:@"trackNumber" ascending:YES],
                                nil];
frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                          managedObjectContext:context
                                            sectionNameKeyPath:@"album.releaseDate" // <-- PROBLEM HERE
                                                     cacheName:nil];

这不起作用,因为具有相同发行日期的两个专辑将显示在同一部分中。

如果我使用album.title作为sectionNameKeyPath,地狱会因为这些部分按照字母顺序排序然后强加在轨道上(按日期,标题,trackNumber排序)而松散。

我如何按日期排序部分,然后按标题排序?


从我读过的内容来看,这种单一属性排序只是我们必须在iOS上生活的东西。 所以我给Album添加了一个transient属性,它充当两个属性的排序键:

- (NSString *)sortKeyDateTitle
{
    [self willAccessValueForKey:@"sortKeyDateTitle"];
    NSString *sortKey = [NSString stringWithFormat:@"%@%@", self.releaseDate, self.title];
    [self didAccessValueForKey:@"sortKeyDateTitle"];
    return sortKey;
}

它产生这样的字符串:

1954-04-01 06:00:00 +0000A Night At Birdland, Vol. 1
1954-04-01 06:00:00 +0000A Night At Birdland, Vol. 2

它的工作原理,但从日期转换为字符串排序似乎很愚蠢。 我在等待更好的东西。

链接地址: http://www.djcxy.com/p/36155.html

上一篇: NSFetchedResultsController with sections sorted by TWO criteria

下一篇: many key not allowed here