9 Stimmen

Wie aktualisiert man einen UITableViewController oder NSFetchedResultsController?

Ich habe ein kleines Problem mit meinem UITableViewController oder NSFetchedResultsController. Ich bin nicht sicher, was das Problem soure ist, aber ich denke, seine die UITableViewController.

Wie ich schon sagte, verwende ich einen NSFetchedResultsController, um meine Daten in einen UITableViewController zu füllen. Die Daten sind nach Datum sortiert und werden auch in Abschnitten nach Datum und Jahr angezeigt, z. B. Mai 2010/Juni 2010/ und so weiter. Dies wird als Abschnittsüberschrift angezeigt.

Wenn ich nun neue Daten hinzufüge, wird automatisch das aktuelle Datum als Standard verwendet, aber wenn ich ein Datum verwenden möchte, das derzeit nicht in der Abschnittsliste enthalten ist, z. B. April 2010 (derzeit Mai und Juni in der Liste), dann wird dies nicht korrekt angezeigt. Erst wenn ich die App beende und erneut starte, werden die neuen Abschnittsüberschriften angezeigt und alles ist in Ordnung.

Ich muss also irgendwie in der Lage sein, meine Liste aufzufrischen oder sie zu aktualisieren. Indem ich sie einfach zum Kontext hinzufüge und sie ändere, scheint sie nicht aktualisiert zu werden.

Wieder bin ich nicht sicher, was ich aktualisieren müssen, wenn es mein NSFetchedResultsController-Objekt oder der UITableViewController ist.

UPDATE #1:

Ich habe gerade herausgefunden, dass es bei dieser Methode eine Ausnahme gibt:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{
    // The fetch controller has sent all current change notifications, so tell the table view to process all updates.
    [self.tableView endUpdates];

}

Hierhin verschiebe ich die Daten:

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath 
{

    UITableView *tableView = self.tableView;

    switch(type) 
    {

        case NSFetchedResultsChangeInsert:
            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;

        case NSFetchedResultsChangeDelete:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;

        case NSFetchedResultsChangeUpdate:
        //  [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];

            break;

        case NSFetchedResultsChangeMove:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            // Reloading the section inserts a new row and ensures that titles are updated appropriately.
            [tableView reloadSections:[NSIndexSet indexSetWithIndex:newIndexPath.section] withRowAnimation:UITableViewRowAnimationFade];
            break;
    }

}

Diese Methode ist weitgehend dem CoreDataBooks-Beispiel von Apple entnommen. Und dies ist der Fehler :

Schwerwiegender Anwendungsfehler. Eine Ausnahme wurde vom Delegaten von NSFetchedResultsController während eines Aufruf von -controllerDidChangeContent:. *** -[NSMutableArray removeObjectAtIndex:]: Index 1 außerhalb der Grenzen [0 .. 0] mit userInfo (null)

Danach funktioniert der Bearbeitungsmodus (wo die Schaltfläche "Löschen" erscheint) nicht mehr.

Gracias.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X