title: Core Data backed UITableView with indexing
body: <p>I am trying to implement a Core Data backed UITableView that supports indexing (eg: the characters that appear down the side, and the section headers that go with them). I have no problems at all implementing this without Core Data using:</p>
  
  <pre><code>- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
  - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView;
  </code></pre>
  
  <p>I also have no problem implementing a UITableView that is backed by Core Data without using the indexing.</p>
  
  <p>What I am trying to figure out is how to elegantly combine the two? Obviously once you index and re-section content, you can no longer use the standard NSFetchedResultsController to retrieve things at a given index path. So I am storing my index letters in an NSArray and my indexed content in an NSDictionary. This all works fine for display, but I have some real headaches when it comes to adding and deleting rows, specifically how to properly implement these methods:</p>
  
  <pre><code>- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller;
  
  - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath;
  
  - (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id &lt;NSFetchedResultsSectionInfo&gt;)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type;
  
  - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller;
  </code></pre>
  
  <p>Because the index paths it's returning me have no correlation with the ones in core data. I got add working by simply rebuilding my index NSArray and NSDictionary when the user adds a row, but doing the same when they delete one crashes the whole application.</p>
  
  <p>Is there a simple pattern/example I'm missing here to make all this work properly?</p>
  
  <p>Edit: Just to clarify I know that the NSFetchedResultsController does this out of the box, but what I want is to replicate the functionality like the Contacts app, where the index is the first letter of the first name of the person.</p>