Ich versuche, eine Core Data unterstützte UITableView zu implementieren, die Indizierung unterstützt (z.B.: die Zeichen, die unten an der Seite erscheinen, und die Abschnittsüberschriften, die mit ihnen gehen). Ich habe überhaupt keine Probleme bei der Umsetzung dieser ohne Core Data mit:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView;
Ich habe auch kein Problem, eine UITableView zu implementieren, die von Core Data unterstützt wird, ohne die Indizierung zu verwenden.
Ich versuche herauszufinden, wie man beides auf elegante Weise kombinieren kann. Offensichtlich, sobald Sie indizieren und Re-Abschnitt Inhalt, können Sie nicht mehr die Standard-NSFetchedResultsController verwenden, um Dinge an einem bestimmten Indexpfad abzurufen. Ich speichere also meine Indexbuchstaben in einem NSArray und meine indizierten Inhalte in einem NSDictionary. Dies alles funktioniert gut für die Anzeige, aber ich habe einige echte Kopfschmerzen, wenn es um das Hinzufügen und Löschen von Zeilen kommt, insbesondere, wie man richtig implementieren diese Methoden:
- (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 <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type;
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller;
Denn die Indexpfade, die es mir zurückgibt, haben keine Korrelation mit denen in Kerndaten. Ich habe add arbeiten, indem Sie einfach meinen Index NSArray und NSDictionary neu aufbauen, wenn der Benutzer eine Zeile hinzufügt, aber das gleiche tun, wenn Sie eine löschen stürzt die gesamte Anwendung.
Gibt es ein einfaches Muster/Beispiel, das ich hier vermisse, damit das alles richtig funktioniert?
Bearbeiten: Nur um zu klären, ich weiß, dass die NSFetchedResultsController dies out of the Box tut, aber was ich will, ist die Funktionalität wie die Kontakte app zu replizieren, wo der Index der erste Buchstabe des Vornamens der Person ist.