NSFetchedResultsController and NSPredicate and a section name
I have core data model with two entities that have a many-to-many relationship with each other.
Eg,
Conference <<---->> Speaker
A conference can have many speakers, and One speaker can be at many conferences.
Im trying to use NSFetchedResultsController the main entity for fetchRequest is the Speaker .
While it does list all speakers alright, but Im trying to get the section as the "Conference" name and list all speakers within that section. I want it so that the name "John" as speaker would appear in two sections. Which implies that he's a speaker at two conferences.
This is the sectionNameKeyPath i'm using: @"conferences.Name"
NSFetchedResultsController *aFetchedResultsController = [[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"conferences.Name" cacheName:@"fCache"] autorelease];
It kinda doesn't work, i get {TedEx}
as the section title when i use [sectionInfo name]
.
The other problem is that If I One speaker appears in one section, (conference), it wont appear in the other section (even if that section(conference) has that speaker object).
This is potentially because, I get the sectionName as a set of combined Conferences. TedEx, SXSW
as a single section.
Some how the goal should be to single out the sectionNameKeypath to fetch only ONE Conference and list all speakers within each. Perhaps i should set some kind of a predicate?
Im kinda in a bind here, is the approach a problem? I've read about Predicates but its kinda hard to grasp if your new to core data.
This is a little different from the way you are thinking of doing it, and I'm not sure if there is a better way to accomplish it with a FRC & sectionNameKeyPath like you want to or not, but perhaps this will work:
NSFetchRequest
to get an NSArray
called conferences
. You could have this sorted by conferenceName or date or whatever you need. [conferences count]
. [conferences objectAtIndex:section]
, and return the speakers count of that Conference. [[conferences objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];