Tutorial :How do I query/filter a to-many relationship in Core Data


I have Customer, Event and Address objects in my data model. Both Customer and Address have a one-to-many relationship to Event.

I can get the distinct list of addresses for a customer's events for by doing this:

NSSet *addressSet = [customer valueForKeyPath:@"events.address"];  

For the part of the UI I'm working on now, I need to display the address from the most recent event prior to now that has an address.

I'm starting to go down the path of creating a NSFetchRequest, setting it's entity, sort descriptors, predicate and then looping through the results, but it seems like a lot of code. Am I missing some obvious way of filtering/sorting on the "events" relationship of the Customer object or is creating the NSFetchRequest the best solution?


This is actually pretty simple because of the KVO and KVC accessors that are available on NSSet and NSArray.

NSSet *eventsWithAddress = [[customer valueForKey:@"events"] filteredSetWithPredicate:[NSPredicate predicateWithFormat:@"address != nil"]];  id mostRecentEvent = [eventsWithAddress valueForKeyPath:@"@max.lastDate"];  

Of course the property name is up to you since I cannot see your data model but that gives you a general idea of where the code needs to go. You can see what operators are available in Apple's documentation.


WARNING: Code written in StackOverflow comment window so you will most likely need to tweak it a bit.

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »