1

ミュージシャンのアルバムを表示するテーブル ビューがあります。各セクションはアルバム、各行はトラックです。アルバム/セクションをリリース日順、次にタイトル順で並べ替える必要があります。次のように 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];

リリース日が同じ 2 つのアルバムが同じセクションに表示されるため、これは機能しません。

セクション名キーパスとして album.title を使用すると、セクションがアルファベット順に並べ替えられ、トラック (日付、タイトル、トラック番号で並べ替えられます) に適用されるため、地獄が解き放たれます。

セクションを日付順、次にタイトル順で並べ替えるにはどうすればよいですか?

4

1 に答える 1

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

動作しますが、並べ替えのために日付から文字列に変換するのはばかげているようです。私はもっ​​と良いものを待っています。

于 2012-08-10T17:16:39.470 に答える