tags:

views:

124

answers:

1

I have model People and model Group, People has field of type Group. How I can calculate count of group in people store? Peoples:{name:Mark,group:linktoGroup1},{name:John,group:linktoGroup2},{name:Mike,group:linktoGroup2},{name:Jane,group:linktoGroup1} This people will have 2 group at all.

+1  A: 

Given NSSet *setOfPeople,

[setOfPeople valueForKeyPath:@"@distinctUnionOfObjects.group"].count;

is the Key-Value coding way to do it. If there are a lot of people or groups, it may be faster to let the SQLite query engine do it (assuming you're using a SQLite backend)...

In a Core Data query, it's easiest if there is an inverse (to-many) relationship from Group to People. So, if the inverse relationship of People.group is Group.people and you have an initialized NSManagedObjectContext *managedObjectContext]:

NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"Group" inManagedObjectContext:managedObjectContext]];
[fetch setPredicate:[NSPredicate predicateWithFormat:@"ANY people IN %@", setOfPeople]];

NSError *err;
NSUIntetger groupCount = [managedObjectContext countForFetchRequest:fetch error:&err];
Barry Wark