0

Core Data に Song エンティティと Genre エンティティがあるとします。ジャンルにはたくさんの曲があります。

すべての曲のジャンルをフェッチするフェッチ リクエストを実行したいと考えています。これは、ジャンルが複数回表示されることを意味します。または、SQL 用語では、

select G.*
  from Songs S
       join Genres G on G.id = S.genre_id

外部キー/主キーは必要ないため、SQL に相当するものは少し伸びていることに気付きました。目標は同じです。簡単に思えますが、私の研究では、私の問題にぴったりの答えが見つかりませんでした。

私の最終的な目標は、この投稿のように、ジャンルを集約して数えることです。繰り返しますが、SQL 用語では次のようになります。

select G.name, count(*)
  from Songs S
       join Genres G on G.id = S.genre_id
 group by G.name

この質問を理解して、リンクからコードを追加して、必要なものを取得できることを願っています。CDがそのように機能しない場合は、機能しないと遠慮なく言ってください。

4

2 に答える 2

0

NSPredicate を使用せずに「ジャンル」エンティティの NSFetchRequest を作成しないのはなぜですか? すべての Genre インスタンスを取得します。それとも、歌のあるジャンルだけが欲しいですか?その場合は、ここで例を見つけることができます。

于 2012-10-26T02:03:36.587 に答える
0

コア データ モデルで、各ジャンルが歌と対多の関係にあると仮定すると、次のように各ジャンルの曲の数が表示されます (実際には、ジャンルを集計してカウントしています)。少なくとも 1 曲:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY songs != NULL"];
NSEntityDescription *genres = [NSEntityDescription entityForName:@"Genre" 
                                          inManagedObjectContext:moc];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:genres];
[request setPredicate:predicate];
NSError *error;
NSArray *genresArray = [moc executeFetchRequest:request error:&error];
NSLog(@"Total number of genres that have songs: %d", genresArray.count);
for (NSManagedObject *genre in genresArray) {
  NSLog(@"Genre: %@ (%@)", [genre valueForKey:@"genreName"], [genre valueForKeyPath:@"songs.@count"]);
}
于 2012-10-26T04:05:39.070 に答える