The NSFetchedResultsController makes populating UITableViews a breeze. I keep forgetting how to set those up, so here’s a quick list on how to create those:
- create a Fetch Request
- create the Fetched Results Controller with the Fetch Reuqest
- execute the Fetch
The Fetch Request itself needs:
- a Managed Object Model
- an Entity Name (i.e. what to fetch)
- an optional Template if created visually
- an optional array of Sort Descriptors
Here’s a custom initialiser that first creates a Fetch Request, adds this to a Fetched Results Controller and finally executes the fetch.
-(NSFetchedResultsController *)fetchedResultsController {
if (!_fetchedResultsController) {
// create fetch request from template
NSFetchRequest *fetchRequest = [[self.managedObjectModel fetchRequestTemplateForName:@"Books"]copy];
// define a sort descriptor
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc]initWithKey:@"airDate" ascending:YES];
NSArray *descriptorArray = [[NSArray alloc]initWithObjects:descriptor, nil];
fetchRequest.sortDescriptors = descriptorArray;
// create the controller
_fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
}
// execute the fetch
[_fetchedResultsController performFetch:nil];
return _fetchedResultsController;
}