我有一个表格视图,显示音乐家的专辑。每个部分都是一个专辑,每一行都是一个专辑。我需要按发布日期排序的专辑/部分,然后按标题排序。我正在从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,那么地狱就会松散,因为这些部分按字母顺序排序,然后强加在轨道上(按日期,标题,轨道编号排序)。
如何按日期对标题进行排序,然后按标题排序?
答案 0 :(得分:1)
从我读过的内容来看,这种单一属性排序只是我们在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
它有效,但从日期转换为字符串进行排序似乎很愚蠢。我在等待更好的事情。