2011-01-28 3 views
2

J'ai une application qui utilise des coredata. Le téléchargement des données a lieu dans une classe A. Les mises à jour/sauvegardes/suppressions Coredata se trouvent dans SharedDelegate (B). Le délégué initie le téléchargement dans A et implémente son protocole pour être averti lorsqu'un téléchargement a été effectué, afin que le délégué puisse mettre à jour ses données dans la base de données.Mise à jour cohérente UITableview après la mise à jour de Coredata

Maintenant, après cela, j'aimerais que la classe C, qui a la UITableview, mette à jour ses lignes et ses cellules pour que je puisse montrer le nouveau contenu.

Comment aurais-je correctement notifié C, qu'il peut mettre à jour sa table? Quelles sont les erreurs possibles qui peuvent survenir? Le téléchargement et la mise à jour se fait de manière asynchrone bien sûr et jusqu'à présent, je ne mets à jour que lorsque TOUS les téléchargements ont été terminés .... Je voudrais partager la tâche, pour ainsi dire.

Des indices?

Répondre

6

Deux options:

  1. Utilisez un NSFetchedResultsController comme source de données de l'affichage du tableau. La documentation pour NSFetchedResultsController contient beaucoup de code que vous pouvez copier & coller dans votre application pour gérer les mises à jour de vue de table chaque fois que le contexte d'objet géré change.

  2. Inscrivez-vous au NSManagedObjectContextObjectsDidChangeNotification. Dans votre méthode de notification, gérer les cas NSInsertedObjectsKey, NSUpdatedObjectsKey et NSDeletedObjectsKey et mettre à jour votre vue de table en conséquence.

+0

cela semble prometteur, va essayer les deux. Merci pour les réponses rapides! – Icky

1

Utilisez NSNotificationCenter. Définissez la classe C pour écouter les notifications et recharger les données en conséquence. Lorsque SharedDelegate B met à jour les données, publiez une notification.

Questions connexes