Comment actualiser un UITableViewController ou NSFetchedResultsController?

J'ai un petit problème avec mon UITableViewController ou NSFetchedResultsController. Je ne suis pas sûr de ce qui est le problème de soure, mais je suppose que c'est la UITableViewController.

Comme je l'ai dit j'utilise un NSFetchedResultsController pour remplir mes données dans un UITableViewController. Les données sont triées par date et est également affiché dans les articles par date de l'année, par exemple, Mai 2010/juin 2010, et ainsi de suite. C'est affiché comme en-tête de section.

Maintenant, quand je ajouter de nouvelles données, il utilise automatiquement la date du jour par défaut, mais si je veux utiliser une date, qui n'est pas actuellement dans la liste de section, par exemple, en avril 2010 (actuellement de Mai et juin dans la liste), alors ce n'est pas affichée correctement. Seulement quand j'ai quitter l'application et de commencer à nouveau, il va montrer les nouveaux en-têtes de section et tout va bien.

Donc j'ai un peu besoin d'être en mesure d'actualiser ma liste ou le mettre à jour. En ajoutant simplement au contexte et à la changer, il ne semble pas de mise à jour.

Encore une fois, je ne suis pas sûr de ce que j'ai besoin de mettre à jour, si c'est à mon NSFetchedResultsController objet ou de la UITableViewController.

Mise à JOUR #1:

Je viens de comprendre qu'il existe une exception à cette méthode :

- (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];

}

C'est là que j'ai déplacer les données :

- (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;
    }

}

Cette méthode est assez bien pris de la CoreDataBooks exemple d'Apple. Et c'est l'erreur :

Grave erreur d'application. Un
exception a été pris par le délégué
de NSFetchedResultsController au cours d'une
appel à controllerDidChangeContent:.
*** -[NSMutableArray removeObjectAtIndex:]: indice 1 au-delà de
limites [0 .. 0] avec userInfo (null)

Et après cela, le mode d'édition (où le bouton supprimer apparaît) ne fonctionne plus.

Grâce.

OriginalL'auteur elementsense | 2010-06-19