2010-02-02 3 views
1

Configuration:Un NSFetchedResultsController vs plusieurs UITableViews - un seul UITableView obtient des mises à jour?

J'ai plusieurs UITableViewControllers (tvc) qui instancient tous un NSFetchedResultsController (frc) distinct. Toutes ces frc-s, cependant, utilisent le même ManagedObjectContext (moc).

Scénario:

Parfois, d'un des TVC-s, je lance un processus d'arrière-plan pour mettre à jour les données. Le processus d'arrière-plan met à jour les données dans un thread séparé et appelle finalement [moc mergeChangesFromContextDidSaveNotification:] sur le thread principal. Ces changements devraient ensuite se propager à frc, et [frcDelegate controllerDidChangeContent:] devrait être appelé. Cela fonctionne bien ... mais seulement pour le frcDelegate dont tvc associé a initié la mise à jour. (Tous les TVC-s agissent comme frcDelegate pour leur frc.)

Comportement attendu:

puisque tous les frc-s sont liés au même moc, tous les frc-s doit ramasser les changements, et [frcDelegate controllerDidChangeContent:] devrait être appelé pour chacun d'eux.

Comportement réel:

un seul [frcDelegate controllerDidChangeContent:] est appelée. Pourquoi est-ce que je vois un comportement réel plutôt que prévu? Comment dois-je déboguer cela? Ou est-ce le bon comportement?

+0

Frc observe uniquement les modifications dans l'entité spécifiée dans sa requête d'extraction. Modifiez-vous les entités que les autres frc observent dans ces mises à jour? – gerry3

+0

Vous devriez soumettre ceci comme réponse parce que c'est exactement cela. (Devrait y réfléchir à deux fois avant de poster à 5h du matin ...) Les objets fraîchement reçus sont tous la même entité, mais les frc-s ont des prédicats différents, et les nouveaux objets correspondent au prédicat d'un seul frc particulier. Je devrais résoudre ce problème en ajoutant plus d'informations à l'objet avant de le sauvegarder, afin qu'il corresponde aux prédicats des frc-s que je veux qu'il corresponde. – Jaanus

Répondre

1

Ceci est le comportement attendu.

Chaque contrôleur de résultats récupérés n'observe que les modifications dans l'entité spécifiée dans sa requête d'extraction. Vraisemblablement, vous modifiez uniquement les objets de l'entité correspondant au contrôleur qui a initié la mise à jour.

Questions connexes