gpt4 book ai didi

ios - NSFetchedResultsController 的部分按两个标准排序

转载 作者:行者123 更新时间:2023-11-29 13:31:01 33 4
gpt4 key购买 nike

我有一个显示音乐家专辑的表格 View 。每个部分是一个专辑,每一行是一个轨道。我需要按发布日期排序的专辑/部分,然后按标题排序。我像这样从核心数据中提取轨道:

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,就会乱七八糟,因为这些部分按字母顺序排序,然后强加到轨道上(按日期、标题、轨道编号排序)。

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

最佳答案

据我所知,这种单一属性排序正是我们在 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

它有效,但是从日期转换为字符串用于排序 似乎很愚蠢。我在等待更好的东西。

关于ios - NSFetchedResultsController 的部分按两个标准排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11906367/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com