2010-06-22 5 views
0

J'ai un UITableView qui récupère les données de CoreData en utilisant FetchedResultsController et il s'enregistre pour la mise à jour des données.Données de base enregistrer les accidents

Sur un deuxième thread, je télécharge les données du serveur et met à jour les mêmes données (utilisées par le UITableView). La mise à jour n'est pas compliquée et il s'agit simplement de mettre à jour un champ BOOL de l'entité.

Quand j'appelle la sauvegarde sur contexte de l'objet, je reçois cette exception: NSInternalInconsistencyException et la raison est

"Failed to process pending changes before save. The context is still dirty after 100 attempts. ..." 

Si je ne sauvegardons pas juste après la mise à jour, mais seulement au moment où la demande est sur le point terminer, l'application s'exécute correctement et le UITableView est correctement mis à jour et les données sont persistantes.

Un pointeur sur pourquoi cela pourrait-il se produire? Est-ce que je fais quelque chose de mal?

Répondre

1

Les contextes d'objets gérés ne sont pas thread-safe. Avez-vous un MOC séparé pour chaque thread?

Si oui, je crois que le bon modèle est d'enregistrer pour NSManagedObjectDidSaveNotifications de l'arrière-plan MOC tel que vous pouvez faire un mergeChangesFromContextDidSaveNotification sur la principale MOC (du thread principal). Cela gardera votre MOCs en synchronisation; ça n'arrive pas automatiquement.

+0

Oh ... Je garde un MOC singleton à partir d'une classe CoreDataUtil de type similaire. Maintenant, se sentir stupide. @ _ @ Une question: les changements enregistrés dans un GPM seront-ils reflétés dans un autre GPM? Merci!!! – Justin

+0

Ajouté un peu plus d'infos – admanimal

Questions connexes