Tengo dos instancias de NSManagedObjectContext
: una se usa en el hilo principal y la otra se usa en un hilo de fondo (a través de NSOperation
). Para la seguridad del hilo, estos dos contextos solo comparten un NSPersistentStoreCoordinator
.Copia de cambios pendientes entre NSManagedObjectContexts con shared persistent store?
El problema que tengo es que los cambios pendientes en el primer contexto (en el hilo principal) no están disponibles para el segundo contexto hasta que se realiza un -save
. Esto es comprensible ya que la tienda persistente compartida no tendrá copias del NSManagedObjects
que se rastrea por -insertedObjects
, -updatedObjects
, y -deletedObjects
persisten.
Desafortunadamente, esto presenta un problema con la experiencia del usuario: los cambios no guardados no aparecerán en los informes (que consumen mucho tiempo) que se generan en el hilo de fondo.
La única solución que puedo pensar es desagradable: tomar los objetos insertados, actualizados y eliminados del primer contexto e insertarlos en el gráfico de objetos del segundo contexto. Existen algunas relaciones bastante complejas en el conjunto de datos, por lo que dudo de ir en esta dirección. Espero que alguien aquí sea una mejor solución.
Gracias Wil! Me gustaría apuntar a 10.6, aunque eso es cada vez más difícil todos los días :-) - Ya estoy rastreando la notificación de cambio, pero no estoy seguro de cómo volver a aplicar los cambios y mantener las relaciones de la entidad. ¿Podrías ser un poco más específico? – chockenberry
Ah sí. Invisiblemente estaba haciendo una suposición basada en mi modelo, que es que cada objeto tiene una clave UUID (cadena) que mantuviste tú mismo. –
Sin guardar en el fondo MOC, las inserciones no serán visibles para el MOC principal (sin MOC anidados). Las actualizaciones/eliminaciones para objetos existentes deberían funcionar si escuchas la notificación de cambio (emitida después de procesar cambios de envío) y actualizas los objetos tú mismo. – diederikh