J'ai un petit problème avec mon UITableViewController ou NSFetchedResultsController. Je ne suis pas sûr quel est le problème soure mais je suppose que c'est le 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 sont également affichées dans des sections par date-année, par ex. Mai 2010/Juin 2010/et ainsi de suite. Ceci est affiché comme en-tête de section. Maintenant, lorsque j'ajoute de nouvelles données, il utilise automatiquement la date actuelle par défaut, mais si je veux utiliser une date, celle-ci ne figure pas actuellement dans la liste des sections, par ex. Avril 2010 (actuellement mai et juin dans la liste), alors ceci n'est pas affiché correctement. Ce n'est que lorsque je quitte l'application et que je la relance, les nouveaux en-têtes de section s'affichent et tout va bien.Comment actualiser un UITableViewController ou un NSFetchedResultsController?
Donc je dois d'une manière ou d'une autre être capable de rafraîchir ma liste ou de la mettre à jour. En l'ajoutant simplement au contexte et en le modifiant, il ne semble pas le mettre à jour.
Encore une fois, je ne suis pas sûr de ce que j'ai besoin de mettre à jour, si c'est mon objet NSFetchedResultsController ou le UITableViewController.
MISE À JOUR # 1:
Je pensais juste qu'il ya une exception dans 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 je déplace 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 beaucoup tiré de l'exemple CoreDataBooks d'Apple. Et c'est l'erreur:
Erreur d'application grave. Une exception a été interceptée par le délégué de NSFetchedResultsController au cours d'un appel à -controllerDidChangeContent :. *** - [NSMutableArray removeObjectAtIndex:]: index 1 au-delà de limites [0 .. 0] avec userInfo (null)
Et après cela, le mode d'édition (où le bouton de suppression apparaît) ne fonctionne pas plus.
Merci.
C'est ce que j'ai ajouté à la question ..., l'exception vient après cela. – elementsense
Vous ne mentionnez même pas 'controller: didChangeSection: atIndex: forChangeType:'. –
isnt -controller: didChangeObject: atIndexPath: forChangeType: newIndexPath faisant la même chose? – elementsense