0

J'ai un NSPredicate sur mes FRC fetchRequest. À un certain point un objet est ajouté à CoreData, je crée un nouveau prédicat, mettre à jour le fetchRequest et accomplissez un ira chercherLa modification de fetchRequest.predicate de NSFetchedResultsController ne déclenche pas de délégué

self.fetchedAddressesController.fetchRequest.predicate = self.predicate; 
BOOL success = [self.fetchedAddressesController performFetch:nil]; 

Cela ne signifie toutefois pas invoquer les méthodes de délégué du CEAF comme controllerWillChangeContent:. Et ma vue de table n'est pas mise à jour.

Cependant, quand j'ajouter la ligne suivante:

[self.tableView reloadData]; 

ci-dessous les deux ci-dessus, je ne vois la mise à jour attendue. Cela montre que les données à afficher ont bien changé. J'ai vérifié le nouveau prédicat et tout va bien. J'ai également mis delegate de FRC à self, et ses méthodes sont invoquées dans d'autres cas.

Des idées déjà ce qui pourrait être faux?

Répondre

1

Le comportement que vous avez décrit est attendu. Selon le Apple documentation, si vous souhaitez modifier une requête d'extraction sur un NSFetchedResultsController, vous devez supprimer le cache (si vous en utilisez un), modifier NSFetchRequest, puis appeler performFetch: (qui n'appelle aucune des méthodes déléguées) .

Si vous voulez savoir ce qui a changé entre les prédicats, vous devez stocker l'ancien état et comparer. Une bibliothèque que j'ai utilisée dans le passé pour cela est Doppelganger.

+0

J'ai consulté cette documentation, mais je ne l'ai pas trouvée facilement en disant que les méthodes de délégué n'étaient pas appelées. Où puis-je trouver ça? Au contraire, je lis: «Suivi de la mémoire uniquement: ... met à jour la section et les informations de commande ...». –

+0

Voir la section "Modification de la requête d'extraction" dans https://developer.apple.com/library/ios/documentation/CoreData/Reference/NSFetchedResultsController_Class/#//apple_ref/doc/uid/TP40008227-CH1-SW23 – Avi

0

Les méthodes déléguées sont appelées lorsque la fonction FRC observe les modifications apportées à l'ensemble des objets extraits sur lesquels elle a des yeux après avoir effectué une extraction. Si vous allez modifier le prédicat et faire une nouvelle extraction, le FRC est réinitialisé et observe maintenant un ensemble différent d'objets. Les méthodes delegate ne sont pas appelées car rien n'a changé dans l'ensemble d'objets d'origine.