Is it possible to have Core Data sort the "many" part of a To-Many relationship during a fetch request?
I'm using Core Data to cache a decent amount of information, and I have a To-Many relationship set up among my managed objects. Naturally I use an NSFetchRequest to fetch an array of the singular side of that relationship. However, I populate a UITableView using the the "many" side of the relationship, an开发者_JAVA百科d I'd like it to be sorted alphabetically when I pull the data.
If I'm not being clear, here's an example:
"employee" and "boss" are both NSManagedObjects in a To-Many relationship - each boss has many employees, but employees only have one boss. After retrieving an array of bosses, I push a UITableViewController containing a list of employees. I'd like the employees to be pre-sorted during the NSFetchRequest to make displaying them easier. Is this possible, and how would I go about doing it?
Why not fetch from the reverse? I assume you already know the unique id of the boss you're interested in, so you could build a predicate like this one:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"boss.bossId == %K", bossId];
NSFetchRequest *req = [[NSFetchRequest alloc] init];
[req setEntity:employeeEntity];
[req setPredicate:pred];
That should fetch out any employee with a matching bossId, you can then add a sort descriptor to that fetch request to sort alphabetically.
Alternatively you could grab the array of NSManagedObject instances that you fetch out in your current implementation, and sort them using a sort descriptor (assumes your employees name is at the property "name"):
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YESorNO];
NSArray *sorted = [entities sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
Now populate your tableview using "sorted".
Note: I'm a little confused about why you're not using an NSFetchedResultsController for this, as it would take care of sectioning for you as well.
精彩评论