【问题标题】:NSFetchedResultsController with sections sorted by TWO criteriaNSFetchedResultsController 的部分按两个标准排序
【发布时间】:2012-08-10 17:16:39
【问题描述】:

我有一个显示音乐家专辑的表格视图。每个部分是一个专辑,每一行是一个曲目。我需要按发行日期排序的专辑/部分,然后按标题。我正在从 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,地狱就会崩溃,因为这些部分是按字母顺序排序的,然后加到曲目上(按日期、标题、曲目编号排序)。

如何按日期然后按标题对部分进行排序?

【问题讨论】:

    标签: ios uitableview core-data nsfetchedresultscontroller


    【解决方案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
    

    它有效,但是从日期转换为字符串进行排序似乎很愚蠢。我在等待更好的结果。

    【讨论】:

    • 您是否找到了一种按两个属性对部分进行排序的方法?
    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多