Un problème de mise à jour de ma vue de table se produit lorsque je modifie par programmation une propriété d'objet géré existante. Je m'attendrais à ce que mon NSFetchedResultsControllerDelegate
soit appelé dans un tel cas, mais ce n'est pas le cas.Données de base: la mise à jour d'un objet géré n'appelle pas NSFetchedResultsControllerDelegate
d'Apple doc dit:
Une instance de
NSFetchedResultsController
utilise des méthodes dans ce protocole d'aviser son délégué que les résultats aller chercher du contrôleur ont été modifiés en raison d'un ajout, de suppression, déplacer ou mise à jour opérations.
En plus de détails, mon objet géré comme une propriété int appelé status
qui prend des valeurs d'une enum
. Ma vue de table n'affiche que les objets dont le status
est égal à upToDate
(l'une des valeurs de l'énumération). Pour ce faire, mon FetchedResultController a un prédicat qui teste ce statut:
predicate = [NSPredicate predicateWithFormat:@"doc.status == %d", upToDate];
Il fonctionne très bien, mais les mises à jour ne sont pas répercutées lorsque je change un objet hors de la date de retour à l'état upToDate
. Mon code est modifié à partir du modèle d'Apple.
Voici ce que j'ai essayé:
myObject.status = [NSNumber numberWithInt:upToDate];
[managedObjectContext save:nil];
[managedObjectContext processPendingChanges];
[myTableView reloadData];
Et enfin, je réussi à avoir mon point de vue la table mise à jour avec un appel à:
[fetchedResultsController performFetch:&error];
[myTableView reloadData];
Mais même alors, aucun de mes NSFetchedResultsControllerDelegate
méthodes get appelé, en contradiction avec le document d'Apple. De plus, aucune animation fluide ne se produit. Je pensais que controllerWillChangeContent:
, controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
et controllerDidChangeContent:
étaient appelés.
Je suppose que j'ai manqué quelque chose, peut-être quelque chose d'évident, mais je ne vois pas quoi. Est-ce que performFetch:
doit être appelée chaque fois qu'un objet géré change potentiellement? Quand est-ce que le NSFetchedResultsControllerD
appelle vraiment son délégué?
Merci.
Toutes les solutions que vous avez trouvées pour ce problème? Je fais face à des situations similaires où les rappels de mes délégués ne sont jamais déclenchés pour une opération de mise à jour. L'ajout de nouveaux objets ou la suppression d'objets existants appelle quand même la méthode déléguée. Quelle pourrait être la raison? –