Je suis nouveau dans Core Data et je ne sais pas comment écrire une requête comme celle-ci en utilisant Core Data.
J'ai deux entités Album et Songs dans le schéma. Album est lié à Song par une relation de type one-to-many et le nom de la relation est tracks. J'ai écrit une requête pour récupérer tous les albums et cela fonctionne bien. Mais maintenant je veux apporter un petit changement pour ne pas obtenir d'albums ayant 0 chanson. J'ai essayé de définir un prédicat sur la requête comme
tracks.@count != 0
tracks.@count != nil
mais cela ne fonctionne pas peut-être à cause du pré-chargement ?. Est-ce que je dois précharger la relation ou quelque chose. Je ne veux pas ajouter d'attribut songCount dans Album et j'ai juste besoin du compte de chansons. Quelle est la meilleure façon d'écrire une requête comme celle-ci ? Merci d'avance !
Code -
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];
C'est ce que j'ai obtenu sur la console après avoir activé le mode Debug
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
Qu'est-ce qui ne va pas dans le code ?