2

私はコアデータが初めてで、コアデータを使用してこのようなクエリを作成する方法がわかりません。

スキーマに Album と Songs の 2 つのエンティティがあります。アルバムは 1 つの多くの関係によってソングに関連付けられており、関係名はトラックです。すべてのアルバムを取得するクエリを作成しましたが、うまく機能しています。しかし、今は少し変更を加えて、0 曲のアルバムを取得しないようにしたいと考えています。リクエストに応じて述語を設定しようとしました

tracks.@count != 0 
tracks.@count != nil

しかし、これは機能していません。障害が原因である可能性があります。リレーションシップか何かをプリフェッチする必要がありますか。Album に属性 songCount を追加したくありません。曲を数える必要があるだけです。このようなクエリを作成する最良の方法は何ですか? 前もって感謝します !

コード -

NSFetchRequest *request = [[NSFetchRequest alloc] init];
 request.entity = [NSEntityDescription entityForName:@"Album" inManagedObjectContext:[self managedObjectContext]];
 NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
 [request setSortDescriptors:[NSArray arrayWithObject:sort]];  
 NSPredicate *albumPredicate = [NSPredicate predicateWithFormat:@"tracks.@count > 0"];
 [request setPredicate:albumPredicate];

これは、デバッグモードをオンにした後にコンソールに表示されたものです

CoreData: sql: SELECT 0, t0.Z_PK FROM ZALBUM t0 WHERE (SELECT COUNT(*) FROM ZTRACK t1 WHERE (t0.Z_PK = t1.ZALBUM) ) > ? ORDER BY t0.ZNAME COLLATE NSCollateNoCase 

コードで何が間違っていますか?

4

2 に答える 2