2010-07-09 3 views
1

Donc, j'ai une relation un-à-plusieurs d'Entreprises à Employés dans CoreData (en utilisant un backend SQLite sur iOS, si c'est pertinent). Je souhaite créer un prédicat qui renvoie uniquement les entreprises auxquelles sont associés 0 employé. Je pourrais le faire en obtenant tous les les entreprises et itérer sur eux, mais ce serait (je suppose) beaucoup plus lent.Comment déterminer le nombre d'objets dans une relation un-à-plusieurs dans CoreData

Des idées?

Merci,
-Aaron

Répondre

2

Après avoir essayé la réponse de @ falconcreek et obtenir une erreur (décrit dans mon commentaire sur sa réponse), J'ai fait un peu de googling et déterminé que la réponse était

NSPredicate *noEmployeesPredicate = [NSPredicate predicateWithFormat:@"[email protected] == 0"]; 

Maintenant tout fonctionne über e fficiently. Merci!

+0

excellent. Je cherchais la fonction @count dans les docs. il vaut toujours la peine de vérifier aussi les relations nulles. – falconcreek

1

En supposant que votre entreprise -> relation de l'employé est nommé « employés »

NSManagedObjectContext *moc = [self managedObjectContext]; 
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Company" inManagedObjectContext:moc]; 
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
[request setEntity:entityDescription]; 

// the following doesn't work 
// NSPredicate *noEmployeesPredicate = [NSPredicate predicateWithFormat:@"employees = nil OR employees[SIZE] = 0"]; 

// use @count instead 
NSPredicate *noEmployeesPredicate = [NSPredicate predicateWithFormat:@"employees = nil OR [email protected] == 0"]; 
[request setPredicate:predicate]; 

NSError *error = nil; 
NSArray *array = [moc executeFetchRequest:request error:&error]; 
if (error) 
{ 
    // Deal with error... 
} 
+0

Merci pour la suggestion. Malheureusement, quand je l'ai couru, j'ai eu ''NSInvalidArgumentException', raison: 'to-many key not allowed here'' Cela a conduit à quelques googling, qui a abouti au résultat que j'ai posté comme réponse. Je pense que le problème est que j'utilise une relation un-à-plusieurs. De toute façon, merci beaucoup! –

Questions connexes