我有一个显示音乐家唱片集的表格视图。每个部分是一个专辑,每行是一个曲目。我需要按发行日期排序的专辑/部分,然后按标题排序。我正在像这样从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添加了一个临时属性,该属性充当这两个属性的排序键:

- (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


它可以工作,但是从日期转换为字符串进行排序似乎很愚蠢。我在等更好的东西。

10-07 19:56
查看更多