私はコアデータが初めてで、コアデータを使用してこのようなクエリを作成する方法がわかりません。
スキーマに 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
コードで何が間違っていますか?